
SubQuery con Max
Publicado por Vgt (9 intervenciones) el 24/08/2016 16:23:04
Saludos Foro,
Les comento que estoy consultando desde PHP a tablas de FoxPro6 por lo que los cursores no funcionan, tengo que hacer la consulta con SQL.
El problema que tengo es una tabla con id y fecha. necesito extraer la consulta de los ultimos registros insertados (por fecha [max]) y sobre esta consulta hacer un segundo filtro de fechas.
Si hago una consulta de esta manera, extraigo la informacion que quiero:
SELECT CALL_SCHEDULE.nid,CALL_SCHEDULE.ncallslipid,max(CALL_SCHEDULE.date) ;
FROM CALL_SCHEDULE ;
GROUP BY CALL_SCHEDULE.ncallslipid ;
ORDER BY CALL_SCHEDULE.ncallslipid asc
Pero si le aplico un where de fecha me traera registros que no quiero, es decir, por ejemplo:
431-51 - 1/1/16
432-51 - 2/1/16
433-51 - 3/1/16
434-54 - 4/1/16
435-54 - 5/1/16
Con la primera consulta, solamente extrae el registro 433 y 435, pero si le pongo un where para que traiga la fecha 2/1/16 me trae el registro 432.
El objetivo es que solamente me haga el where sobre los valores max.
He intentado varias cosas pero sin exito:
SELECT A.ncallslipid ;
FROM CALL_SCHEDULE A;
WHERE EXIST ( SELECT B.ncallslipid,max(B.date) FROM CALL_SCHEDULE B WHERE A.nid = B.nid GROUP BY B.ncallslipid) ;
GROUP BY A.ncallslipid ;
ORDER BY A.ncallslipid asc
SELECT A.ncallslipid,A.date ;
FROM CALL_SCHEDULE A ;
INNER JOIN (SELECT nid,ncallslipid,max(date) FROM CALL_SCHEDULE GROUP BY ncallslipid) B ;
ON A.nid = B.nid
Me pregunto si alguien con mas experiencia en esto me pueda apoyar.
De antemano le agradezco.
Les comento que estoy consultando desde PHP a tablas de FoxPro6 por lo que los cursores no funcionan, tengo que hacer la consulta con SQL.
El problema que tengo es una tabla con id y fecha. necesito extraer la consulta de los ultimos registros insertados (por fecha [max]) y sobre esta consulta hacer un segundo filtro de fechas.
Si hago una consulta de esta manera, extraigo la informacion que quiero:
SELECT CALL_SCHEDULE.nid,CALL_SCHEDULE.ncallslipid,max(CALL_SCHEDULE.date) ;
FROM CALL_SCHEDULE ;
GROUP BY CALL_SCHEDULE.ncallslipid ;
ORDER BY CALL_SCHEDULE.ncallslipid asc
Pero si le aplico un where de fecha me traera registros que no quiero, es decir, por ejemplo:
431-51 - 1/1/16
432-51 - 2/1/16
433-51 - 3/1/16
434-54 - 4/1/16
435-54 - 5/1/16
Con la primera consulta, solamente extrae el registro 433 y 435, pero si le pongo un where para que traiga la fecha 2/1/16 me trae el registro 432.
El objetivo es que solamente me haga el where sobre los valores max.
He intentado varias cosas pero sin exito:
SELECT A.ncallslipid ;
FROM CALL_SCHEDULE A;
WHERE EXIST ( SELECT B.ncallslipid,max(B.date) FROM CALL_SCHEDULE B WHERE A.nid = B.nid GROUP BY B.ncallslipid) ;
GROUP BY A.ncallslipid ;
ORDER BY A.ncallslipid asc
SELECT A.ncallslipid,A.date ;
FROM CALL_SCHEDULE A ;
INNER JOIN (SELECT nid,ncallslipid,max(date) FROM CALL_SCHEDULE GROUP BY ncallslipid) B ;
ON A.nid = B.nid
Me pregunto si alguien con mas experiencia en esto me pueda apoyar.
De antemano le agradezco.
Valora esta pregunta


0