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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top