我有2个表,使用一个内连接来对它们进行查询。

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

它计算2个日期之间的报告项的ID。表1持有的报告信息(日期,GROUPID等),表2持有的报告中的条目。

我想进行查询几乎完全一样,除了它只能选择从最新的日期报告中的IDS,那些2个日期之间。

谁能帮助?我不能完全得到我的头周围MAX(日期)类型的查询 - 所有我回来是每个ID的数量也最大日期,而不仅仅是那些最大日IDS

谢谢,


我一直在想也许是一个嵌套的SQL查询 - 你可以做到这一点?我可以找到关于谷歌的参考,但不能让它开始工作......类似的东西:

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 < ?
)

无法得到那个工作,虽然,当我尝试测试它在phpMyAdmin,它踢我了一个错误,告诉我,我的用户没有SELECT权限。奇怪,因为这是一个测试服务器我登录到作为根。

有帮助吗?

解决方案

在不考虑表的结构的详细信息,我建议你尝试是这样的:

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)

我没有测试过这一点,但它应该在,你可以用这个问题去一个方向点。您使用子查询的另一项建议是有效的,可能工作是这样的:

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)
)

或JOIN到一个临时表:

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

其他提示

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

将让你与日期10个第一行

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top