2009-04-19 57 views
0

我有2个表,使用内部连接来查询它们。MySQL Help:SELECT table2.id WHERE ... table1.date最大

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

它计算两个日期之间的报告条目的ID。表1保存有关报告(日期,组ID等)的信息,表2保存报告中的条目。

我想查询几乎完全一样的,除了它只在这两个日期之间选择具有最新日期的报告中的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身份登录。

+1

你能提供两个表的结构和哪些信息你想从两个表中检索?这将使提供有效的示例代码变得更加简单。 – 2009-04-19 17:19:12

回答

0

没有关于表的结构的进一步信息10个第一排,我建议你尝试这样:

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 
-1
...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10 

将让你与日期

+0

不完全是我正在寻找的 - 我需要得到最新的日期,并选择与该日期的所有ID。 – Dan 2009-04-19 17:12:34

+0

这不是一个答案,而是一个评论。此外,它是MySql语法。 – soulmerge 2009-04-19 17:17:12

相关问题