use*_*144 40 mysql sql greatest-n-per-group
假设我有一个messages用列调用的表:
id | from_id | to_id | subject | message | timestamp
Run Code Online (Sandbox Code Playgroud)
我想只收到每个用户的最新消息,就像您在深入了解实际线程之前在FaceBook收件箱中看到的那样.
这个查询似乎让我接近我需要的结果:
SELECT * FROM messages GROUP BY from_id
Run Code Online (Sandbox Code Playgroud)
但是,查询给了我每个用户最早的消息,而不是最新消息.
我无法想出这个.
Dev*_*art 83
您应该找出timestamp每个组(子查询)中的最后一个值,然后将此子查询连接到表中 -
SELECT t1.* FROM messages t1
JOIN (SELECT from_id, MAX(timestamp) timestamp FROM messages GROUP BY from_id) t2
ON t1.from_id = t2.from_id AND t1.timestamp = t2.timestamp;
Run Code Online (Sandbox Code Playgroud)
Ven*_*adi 18
试试这个
SELECT * FROM messages where id in (SELECT max(id) FROM messages GROUP BY from_id ) order by id desc
Run Code Online (Sandbox Code Playgroud)
ley*_*ari 16
此查询为每个 Form_id 返回最后一条记录:
SELECT m1.*
FROM messages m1 LEFT JOIN messages m2
ON (m1.Form_id = m2.Form_id AND m1.id < m2.id)
WHERE m2.id IS NULL;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90005 次 |
| 最近记录: |