【发布时间】:2013-08-10 17:58:54
【问题描述】:
我的 SQL 查询有问题
我有表message 和表recipient
message是
ID author date
--------------------
0 1 2013-07-08 05:38:47
1 1 2013-07-13 05:38:47
2 1 2013-07-15 05:38:47
3 1 2013-07-15 05:38:47
4 2 2013-07-17 05:38:47
5 1 2013-07-28 05:38:47
recipient是
ID m_id recipient
--------------------
0 0 2
1 1 2
2 2 3
3 3 2
4 4 1
5 5 2
我需要从表message 返回行,并从表recipient 中按收件人列 分组,最后日期在message 表中
我试试这个
SELECT m.*
FROM message as m
INNER JOIN recipient as r ON (m.ID = r.m_id)
WHERE m.author = 1
GROUP BY r.recipient
ORDER BY m.ID DESC
返回是
ID author date
--------------------
2 1 2013-07-15 05:38:47
0 1 2013-07-08 05:38:47
但我需要
ID author date
--------------------
5 1 2013-07-28 05:38:47
2 1 2013-07-15 05:38:47
请帮忙
我使用 MySQL 服务器 5.1
我找到了解决问题的方法
SELECT m.*
FROM (
SELECT * FROM recipient
WHERE 1=1
ORDER BY recipient.ID DESC
) AS r
INNER JOIN message AS m ON (r.m_id = m.ID)
WHERE m.author = 1
GROUP BY r.recipient
只是反转表recipient
【问题讨论】:
-
你使用的是什么 rdbms?
-
为什么要为一位作者返回两行?
-
GROUP BY应该做什么? -
缺失:您的 RDBMS 和版本。表定义包括 NOT NULL、FK 和 PK 约束。如何断绝关系?如何处理丢失的收件人(如果可能)?
-
你的测试用例多处矛盾。我假设消息
2 2 3中的这一行应为2 2 1,根据您的描述,结果应为4 2 2013-07-17 05:38:47、5 1 2013-07-28 05:38:47。
标签: mysql sql group-by sql-order-by greatest-n-per-group