【问题标题】:MySQL Help: SELECT table2.id WHERE ... table1.date is largestMySQL 帮助:SELECT table2.id WHERE ... table1.date 最大
【发布时间】:2010-10-20 10:08:30
【问题描述】:

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

【问题讨论】:

  • 您能否提供两个表的结构以及您想从两个表中检索的确切信息?这将使提供有效的示例代码变得更加简单。

标签: sql count max


【解决方案1】:

如果没有有关表格结构的更多信息,我建议您尝试以下操作:

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

【讨论】:

  • 谢谢。让嵌套选择正常工作 - 实际查询比我发布的示例要长得多,而且我有一个错字。
【解决方案2】:
 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

将为您提供 10 个带有日期的前行

【讨论】:

  • 不完全是我想要的 - 我需要获取最新日期并选择具有该日期的所有 id。
  • 这不是答案,而是评论。此外,它是MySql语法。
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2014-01-20
相关资源
最近更新 更多