0

我有 2 个表,使用内部联接来查询它们。

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

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

我想做一个几乎完全相同的查询,除了它只从这两个日期之间的最新日期的报告中选择 ID。

任何人都可以帮忙吗?我无法完全理解 MAX(date) 类型的查询——我得到的只是每个 id 的计数以及最大日期,而不仅仅是来自最大日期的那些 id。

谢谢,


我一直在想也许是一个嵌套的 SQL 查询——你能做到吗?我可以在 Google 上找到参考资料,但无法使用...类似于:

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

4

2 回答 2

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
于 2009-04-19T17:32:55.920 回答
-1
 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

会给你 10 第一行的日期

于 2009-04-19T16:41:25.873 回答