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

Preguntas similare

Leer las respuestas

#6 Mario V.
22/05/2009 - 01:02 | Informe spam
MAX funciona siempre y cuando la seleccion la hago solo por un campo

Si quiero obtener campos adicionales en el registro que despliega, tengo que
agrupar en GROUP BY pero ahi me retorna mas de un
registro.

un poco complicada la sentencia, pero ya la solucione!
Gracias nuevamente

salu2
Mario



"Mauro Jesús" escribió en el
mensaje news:
si TOP no funciona correctamente, prueba con la instruccion MAX

Saludos!
Mauro Jesús


"Mario V." escribió en el mensaje
news:
Gracias por Responder Mauro,

cambie la sentencia por esta: (sin DISTINCT porque sale error)

SELECT TOP 1 fecha_ent, tarjeta, 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

pero me devuelve el registro con fecha 2009-05-15 no el de fecha
2009-05-19



Salu2

Mario





"Mauro Jesús" escribió en
el mensaje news:O$Kel%
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















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