Consulta de agrupación, me mezcla registros

10/03/2010 - 14:28 por Bartolomé Genovard | Informe spam
Hola,

tengo una tabla:

CREATE TABLE [dbo].[Table_1](
[curso] [nchar](10) NOT NULL,
[nota] [int] NOT NULL,
[fecha] [date] NOT NULL,

y con datos
curso nota fecha
A 1 2010-12-31
A 3 2010-01-14
A 4 2010-02-18
A 9 2009-12-11
B 1 2010-05-15
B 10 2010-02-01
C 3 2010-04-21
D 2 2010-01-01

Digamos que necesito tomar la última nota de cada curso, para lo cual
necesito agrupar. Pero claro, en la consulta debo indicar una función
a cada campo, en este caso

SELECT curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
FROM dbo.Table_1
GROUP BY curso

pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
la uqe corresponda al curso en cuestión... es que lo único que se me
ocurre es hacer dos consultas, una para sacar el último curso y luego
de ahí sacar las notas de cada uno... uffff, q rollo...

Y es que en el campo nota debo asignar alguna función pq sino la
consulta da error...

gracias

Preguntas similare

Leer las respuestas

#1 Bartolomé Genovard
10/03/2010 - 14:31 | Informe spam
No lo he puesto, pero la consulta anterior devuelve:

curso nota fecha
A 9 2010-12-31
B 10 2010-05-15
C 3 2010-04-21
D 2 2010-01-01

Y debería ser

curso nota fecha
A 1 2010-12-31
B 1 2010-05-15
C 3 2010-04-21
D 2 2010-01-01

supongo que con una consulta si se puede hacer, pues con access se
puede hacer, y me extraña que aquí no; es que soy novato con el sql
server.

gracias

On 10 mar, 14:28, Bartolomé Genovard wrote:
Hola,

tengo una tabla:

CREATE TABLE [dbo].[Table_1](
        [curso] [nchar](10) NOT NULL,
        [nota] [int] NOT NULL,
        [fecha] [date] NOT NULL,

y con datos
curso       nota    fecha
A               1       2010-12-31
A               3       2010-01-14
A               4       2010-02-18
A               9       2009-12-11
B               1       2010-05-15
B               10      2010-02-01
C               3       2010-04-21
D               2       2010-01-01

Digamos que necesito tomar la última nota de cada curso, para lo cual
necesito agrupar. Pero claro, en la consulta debo indicar una función
a cada campo, en este caso



SELECT     curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
FROM         dbo.Table_1
GROUP BY curso

pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
la uqe corresponda al curso en cuestión... es que lo único que se me
ocurre es hacer dos consultas, una para sacar el último curso y luego
de ahí sacar las notas de cada uno... uffff, q rollo...

Y es que en el campo nota debo asignar alguna función pq sino la
consulta da error...

gracias
Respuesta Responder a este mensaje
#2 Ricardo Junquera
10/03/2010 - 15:48 | Informe spam
Hola

Tendrías que hacer una consulta para sacar la ultima fecha de cada curso

SELECT curso, MAX(fecha) AS FechaMax
FROM dbo.Table_1
GROUP BY curso

Ahora con esto obtener la nota de cada uno de los cursos pero solo para la
fecha maxima
Creo que podria ser algo asi:

Select A.curso,A.Nota,A.Fecha FROM dbo.Table_1 A
Inner join (SELECT curso, MAX(fecha) AS FechaMax
FROM dbo.Table_1
GROUP BY curso) B on A.curso=b.curso and a.fecha=b.fechaMax
Un saludo



Ricardo Junquera
Consultor Business Intelligence

BG&S a delaware company


"Bartolomé Genovard" wrote:

Hola,

tengo una tabla:

CREATE TABLE [dbo].[Table_1](
[curso] [nchar](10) NOT NULL,
[nota] [int] NOT NULL,
[fecha] [date] NOT NULL,

y con datos
curso nota fecha
A 1 2010-12-31
A 3 2010-01-14
A 4 2010-02-18
A 9 2009-12-11
B 1 2010-05-15
B 10 2010-02-01
C 3 2010-04-21
D 2 2010-01-01

Digamos que necesito tomar la última nota de cada curso, para lo cual
necesito agrupar. Pero claro, en la consulta debo indicar una función
a cada campo, en este caso

SELECT curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
FROM dbo.Table_1
GROUP BY curso

pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
la uqe corresponda al curso en cuestión... es que lo único que se me
ocurre es hacer dos consultas, una para sacar el último curso y luego
de ahí sacar las notas de cada uno... uffff, q rollo...

Y es que en el campo nota debo asignar alguna función pq sino la
consulta da error...

gracias
.

Respuesta Responder a este mensaje
#3 Bartolomé Genovard
10/03/2010 - 18:12 | Informe spam
Hola,

el ejemplo que te he puesto es solo eso un ejemplo el caso real es mas
complejo, lo que entiendo es uqe mas que enlazar por fecha y curso,
debería buscar el id del registro que contiene la última fecha; que no
tiene pq ser el máximo, además, supongamos que la fecha se puede
repetir...

joder, si que es complejo...


On 10 mar, 15:48, Ricardo Junquera
wrote:
 Hola

Tendrías que hacer una consulta para sacar la ultima fecha de cada curso

SELECT     curso, MAX(fecha) AS FechaMax
               FROM         dbo.Table_1
           GROUP BY curso

Ahora con esto obtener la nota de cada uno de los cursos pero solo para la
fecha maxima
Creo que podria ser algo asi:

Select A.curso,A.Nota,A.Fecha  FROM         dbo.Table_1  A
Inner join (SELECT     curso, MAX(fecha) AS FechaMax
                FROM         dbo.Table_1
                 GROUP BY curso) B on  A.curso=b.curso and a.fecha=b.fechaMax
Un saludo

Ricardo Junquera
Consultor Business Intelligence

BG&S a delaware company

"Bartolomé Genovard" wrote:
> Hola,

> tengo una tabla:

> CREATE TABLE [dbo].[Table_1](
>    [curso] [nchar](10) NOT NULL,
>    [nota] [int] NOT NULL,
>    [fecha] [date] NOT NULL,

> y con datos
> curso       nota    fecha
> A          1       2010-12-31
> A          3       2010-01-14
> A          4       2010-02-18
> A          9       2009-12-11
> B          1       2010-05-15
> B          10      2010-02-01
> C          3       2010-04-21
> D          2       2010-01-01

> Digamos que necesito tomar la última nota de cada curso, para lo cual
> necesito agrupar. Pero claro, en la consulta debo indicar una función
> a cada campo, en este caso

> SELECT     curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
> FROM         dbo.Table_1
> GROUP BY curso

> pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
> la uqe corresponda al curso en cuestión... es que lo único que se me
> ocurre es hacer dos consultas, una para sacar el último curso y luego
> de ahí sacar las notas de cada uno... uffff, q rollo...

> Y es que en el campo nota debo asignar alguna función pq sino la
> consulta da error...

> gracias
> .
Respuesta Responder a este mensaje
#4 Dany
10/03/2010 - 22:15 | Informe spam
Amigo,

Creo que lo buscas es algo asi

Select t.curso,
(Select top 1 Nota from table1 tn
where tn.curso=t.curso
order by tn.fecha desc) as ultima_nota
from ( select distinct curso from table_1) t

con esto obtenemos la ultima nota registrada del curso, si tuvieras un
campo donde guardas fecha y hora que se realizo la operacion se haria
mas facil, reemplazas solo el tn.fecha desc por tn.fechaoperacion desc.









On 10/03/2010 12:12 p.m., Bartolomé Genovard wrote:
Hola,

el ejemplo que te he puesto es solo eso un ejemplo el caso real es mas
complejo, lo que entiendo es uqe mas que enlazar por fecha y curso,
debería buscar el id del registro que contiene la última fecha; que no
tiene pq ser el máximo, además, supongamos que la fecha se puede
repetir...

joder, si que es complejo...


On 10 mar, 15:48, Ricardo Junquera
wrote:
Hola

Tendrías que hacer una consulta para sacar la ultima fecha de cada curso

SELECT curso, MAX(fecha) AS FechaMax
FROM dbo.Table_1
GROUP BY curso

Ahora con esto obtener la nota de cada uno de los cursos pero solo para la
fecha maxima
Creo que podria ser algo asi:

Select A.curso,A.Nota,A.Fecha FROM dbo.Table_1 A
Inner join (SELECT curso, MAX(fecha) AS FechaMax
FROM dbo.Table_1
GROUP BY curso) B on A.curso=b.curso and a.fecha=b.fechaMax
Un saludo

Ricardo Junquera
Consultor Business Intelligence

BG&S a delaware company

"Bartolomé Genovard" wrote:
Hola,



tengo una tabla:



CREATE TABLE [dbo].[Table_1](
[curso] [nchar](10) NOT NULL,
[nota] [int] NOT NULL,
[fecha] [date] NOT NULL,



y con datos
curso nota fecha
A 1 2010-12-31
A 3 2010-01-14
A 4 2010-02-18
A 9 2009-12-11
B 1 2010-05-15
B 10 2010-02-01
C 3 2010-04-21
D 2 2010-01-01



Digamos que necesito tomar la última nota de cada curso, para lo cual
necesito agrupar. Pero claro, en la consulta debo indicar una función
a cada campo, en este caso



SELECT curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
FROM dbo.Table_1
GROUP BY curso



pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
la uqe corresponda al curso en cuestión... es que lo único que se me
ocurre es hacer dos consultas, una para sacar el último curso y luego
de ahí sacar las notas de cada uno... uffff, q rollo...



Y es que en el campo nota debo asignar alguna función pq sino la
consulta da error...



gracias
.





Respuesta Responder a este mensaje
#5 Ricardo Junquera
11/03/2010 - 12:23 | Informe spam
Hola Bartolome

Si tienes campo ID, por supuesto que mucho mejor.

Pero la idea es esa, primero una SubConsulta para obtener el ID de la fecha
del curso y despues una consulta donde filtres (con un join o con IN ) los
datos con lo obtenido en la subconsulta

Un saludo.



Ricardo Junquera
Consultor Business Intelligence

BG&S a delaware company


"Bartolomé Genovard" wrote:

Hola,

el ejemplo que te he puesto es solo eso un ejemplo el caso real es mas
complejo, lo que entiendo es uqe mas que enlazar por fecha y curso,
debería buscar el id del registro que contiene la última fecha; que no
tiene pq ser el máximo, además, supongamos que la fecha se puede
repetir...

joder, si que es complejo...


On 10 mar, 15:48, Ricardo Junquera
wrote:
> Hola
>
> Tendrías que hacer una consulta para sacar la ultima fecha de cada curso
>
> SELECT curso, MAX(fecha) AS FechaMax
> FROM dbo.Table_1
> GROUP BY curso
>
> Ahora con esto obtener la nota de cada uno de los cursos pero solo para la
> fecha maxima
> Creo que podria ser algo asi:
>
> Select A.curso,A.Nota,A.Fecha FROM dbo.Table_1 A
> Inner join (SELECT curso, MAX(fecha) AS FechaMax
> FROM dbo.Table_1
> GROUP BY curso) B on A.curso=b.curso and a.fecha=b.fechaMax
> Un saludo
>
> Ricardo Junquera
> Consultor Business Intelligence
>
> BG&S a delaware company
>
> "Bartolomé Genovard" wrote:
> > Hola,
>
> > tengo una tabla:
>
> > CREATE TABLE [dbo].[Table_1](
> > [curso] [nchar](10) NOT NULL,
> > [nota] [int] NOT NULL,
> > [fecha] [date] NOT NULL,
>
> > y con datos
> > curso nota fecha
> > A 1 2010-12-31
> > A 3 2010-01-14
> > A 4 2010-02-18
> > A 9 2009-12-11
> > B 1 2010-05-15
> > B 10 2010-02-01
> > C 3 2010-04-21
> > D 2 2010-01-01
>
> > Digamos que necesito tomar la última nota de cada curso, para lo cual
> > necesito agrupar. Pero claro, en la consulta debo indicar una función
> > a cada campo, en este caso
>
> > SELECT curso, MAX(nota) AS Expr1, MAX(fecha) AS Expr2
> > FROM dbo.Table_1
> > GROUP BY curso
>
> > pero aquí tengo el error, pues no quiero el valor máximo de nota, sino
> > la uqe corresponda al curso en cuestión... es que lo único que se me
> > ocurre es hacer dos consultas, una para sacar el último curso y luego
> > de ahí sacar las notas de cada uno... uffff, q rollo...
>
> > Y es que en el campo nota debo asignar alguna función pq sino la
> > consulta da error...
>
> > gracias
> > .

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida