我有2个表,使用内部联接来查询它们。
SELECT COUNT(table2.id)
FROM table2
INNER JOIN table1 ON table2.relazioneid = table1.id
WHERE table1.date > ? AND table1.date < ?
它计算两个日期之间报告的条目ID。表1包含有关报告的信息(日期,groupid等),table2保存报告中的条目。
我想查询几乎完全一样,除了它只选择报告中带有最新日期的ID,在这两个日期之间。
有人可以帮忙吗?我不能完全理解MAX(日期)类型查询 - 我得到的只是每个id和最大日期的计数,而不仅仅是最大日期的那些ID。
谢谢,
我一直在想一个嵌套的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权限。很奇怪,因为这是我以root用户身份登录的测试服务器。
答案 0 :(得分:0)
如果没有关于表格结构的进一步信息,我建议您尝试这样的事情:
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)
)
或者加入临时表:
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
答案 1 :(得分:-1)
...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10
将为您提供10个日期
的第一行