MySQL Ayuda: table2.id seleccionar dónde ... table1.date es más grande
Pregunta
Tengo 2 tablas, utilizando una combinación interna para consultar ellos.
SELECT COUNT(table2.id)
FROM table2
INNER JOIN table1 ON table2.relazioneid = table1.id
WHERE table1.date > ? AND table1.date < ?
Cuenta los identificadores de las entradas en los informes entre 2 fechas. La Tabla 1 contiene información sobre los informes (fecha, groupid etc), tabla2 tiene las entradas en los informes.
Me gustaría hacer una consulta casi exactamente el mismo, excepto que sólo selecciona los identificadores del informe con la fecha más reciente, entre esas 2 fechas.
¿Alguien puede ayudar? Yo no puedo sacarlo de mi cabeza MAX (fecha) tipo de consultas -. Todo lo que se obtiene es un recuento de todos los ID y también la fecha como máximo, en lugar de sólo los identificadores de partir de la fecha máx
Gracias,
He estado pensando tal vez una consulta SQL anidado - se puede hacer esto? No puedo encontrar referencias en Google, pero no puedo conseguir que funcione ... algo similar a:
SELECT COUNT(table2.id)
FROM table2
INNER JOIN table1 ON table2.relazioneid = table1.id
WHERE table1.date > ? AND table1.date < ? AND
(
SELECT MAX(date)
FROM table1
WHERE date > ? AND date < ?
)
No se puede conseguir que funcione sin embargo, y cuando trato de probarlo en phpMyAdmin, me echa con un error diciendo que mi usuario no tiene privilegios de SELECT. Extraño, ya que este es un servidor de prueba estoy conectado al sistema como root.
Solución
Sin más información con respecto a la estructura de las tablas, sugeriría que intenta algo como esto:
SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)
No he probado esto, pero debe apuntar en una dirección que podría ir con este problema. Su otra sugerencia de utilizar una sub consulta es válida y podría funcionar algo como esto:
SELECT *
FROM table2 t2
WHERE t2.parent_id IN (
SELECT t1.relation_id
FROM table1 t1
WHERE t1.date BETWEEN ? AND ?
GROUP BY t1.relation_id
HAVING MAX(t1.date)
)
O en una unión a una tabla temporal:
SELECT *
FROM table2 t2
INNER JOIN (
SELECT t1.relation_id
FROM table1 t1
WHERE t1.date BETWEEN ? AND ?
GROUP BY t1.relation_id
HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id
Otros consejos
...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10
te llevará 10 primeras filas con las fechas