MySQL帮助:SELECT table2.id WHERE ... table1.date是最大的

时间:2009-04-19 16:30:39

标签: sql count max

我有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用户身份登录的测试服务器。

2 个答案:

答案 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个日期

的第一行