MySQL的帮助:选择table2.id WHERE ... table1.date是最大
题
我有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个第一行
不隶属于 StackOverflow