Consulta SQL Agrupada

21/05/2009 - 00:57 por Mario V. | Informe spam
Saludos amigos!

A ver si alguien me da una mano con esta consulta:
Tengo una tabla con 3 campos:

TARJETA (VARCHAR(20))
STATUS (VARCHAR(20))
FECHA_ENT (DATETIME)

Necesito hacer una consulta que me arroje el registro mas reciente con
respecto al campo fecha
por cada tarjeta que encuentre en un rango de fechas

si hago esto:

SELECT distinct tarjeta, fecha_ent, status
FROM MOVIMIENTOS WHERE FECHA_ENT >= '2009-05-13' AND FECHA_ENT <=
'2009-05-20'
GROUP BY tarjeta,fecha_ent,status ORDER BY tarjeta,fecha_ent

despliega:

tarjeta fecha_ent status
-
36021801234567 2009-05-19 ACTIVACIONES
36021801234567 2009-05-15 ARRIBO
36021801234567 2009-05-15 ENVIO

pero lo que quiero es que solo salga el primer registro

si cambio el GROUP BY por: GROUP BY tarjeta
sale mensaje de error:

Mens. 8120, Nivel 16, Estado 1, Línea 2
Column 'MOVIMIENTOS.FECHA_ENT' is invalid in the select list because it is
not contained in either an aggregate function or the GROUP BY clause.

me pide que agregue al GROUP BY todos los campos que selecciono.

Agradezco su ayuda

Salu2
Mario
 

Leer las respuestas

#1 Mauro Jesús
21/05/2009 - 01:03 | Informe spam
y si ocupas la clausula TOP ?

SELECT TOP 1 distinct tarjeta, fecha_ent, status
FROM MOVIMIENTOS WHERE FECHA_ENT >= '2009-05-13' AND FECHA_ENT <'2009-05-20'
GROUP BY tarjeta,fecha_ent,status ORDER BY tarjeta,fecha_ent

Saludos!
Mauro Jesús


"Mario V." escribió en el mensaje
news:
Saludos amigos!

A ver si alguien me da una mano con esta consulta:
Tengo una tabla con 3 campos:

TARJETA (VARCHAR(20))
STATUS (VARCHAR(20))
FECHA_ENT (DATETIME)

Necesito hacer una consulta que me arroje el registro mas reciente con
respecto al campo fecha
por cada tarjeta que encuentre en un rango de fechas

si hago esto:

SELECT distinct tarjeta, fecha_ent, status
FROM MOVIMIENTOS WHERE FECHA_ENT >= '2009-05-13' AND FECHA_ENT <=
'2009-05-20'
GROUP BY tarjeta,fecha_ent,status ORDER BY tarjeta,fecha_ent

despliega:

tarjeta fecha_ent status
-
36021801234567 2009-05-19 ACTIVACIONES
36021801234567 2009-05-15 ARRIBO
36021801234567 2009-05-15 ENVIO

pero lo que quiero es que solo salga el primer registro

si cambio el GROUP BY por: GROUP BY tarjeta
sale mensaje de error:

Mens. 8120, Nivel 16, Estado 1, Línea 2
Column 'MOVIMIENTOS.FECHA_ENT' is invalid in the select list because it is
not contained in either an aggregate function or the GROUP BY clause.

me pide que agregue al GROUP BY todos los campos que selecciono.

Agradezco su ayuda

Salu2
Mario

Preguntas similares