我使用MySQL5.1。
这是我的DB模式:
id user_id type created_at
1 32 X 2012-11-19
2 32 Y 2012-11-18
3 30 X 2012-11-16
4 32 Z 2012-11-17
5 31 Y 2012-11-13
6 32 Z 2012-11-9我希望我的SQL查询返回每种类型的user_id、type和最新的created_at。我尝试发出这样的请求:SELECT max(type) FROM notification WHERE user_id=34 ORDER BY type,但它只返回最新的created_at。
发布于 2012-11-20 17:26:53
在非常简单的查询中不能做到这一点,因为GROUP BY (顺便说一句,您在查询中遗漏了它)不能保证它不会从多个行中返回混合的值。
SELECT * FROM notifications AS t1
INNER JOIN (
SELECT type, MAX(`created_at`) AS max_created_at
FROM notification
WHERE user_id=34
GROUP BY `type`
) AS t2
ON t1.type = t2.type
AND t1.created_at = t2.max_created_at发布于 2012-11-20 17:26:03
select n.id, n.user_id, n.type, m.max_created_at
from notification n
inner join
(
select type, max(created_at) as max_created_at
from notification
group by type
) m on n.type = m.type and
m.max_created_at = n.created_at注这确实假设没有两条记录具有相同的类型和created_at日期。
发布于 2012-11-20 17:24:15
以下查询为每种类型选择最高的created_at:
SELECT type, MAX(created_at) FROM notification GROUP BY type ORDER BY type不确定你想要如何与用户结合,你的问题不够精确。
以下查询为特定用户的每种类型选择最高created_at:
SELECT user, type, MAX(created_at)
FROM notification
WHERE user = 34
GROUP BY type, user
ORDER BY type, userhttps://stackoverflow.com/questions/13469990
复制相似问题