首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个请求中为每种类型选择最大值

如何在一个请求中为每种类型选择最大值
EN

Stack Overflow用户
提问于 2012-11-20 17:20:21
回答 5查看 79关注 0票数 0

我使用MySQL5.1。

这是我的DB模式:

代码语言:javascript
复制
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_idtype和最新的created_at。我尝试发出这样的请求:SELECT max(type) FROM notification WHERE user_id=34 ORDER BY type,但它只返回最新的created_at

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-20 17:26:53

在非常简单的查询中不能做到这一点,因为GROUP BY (顺便说一句,您在查询中遗漏了它)不能保证它不会从多个行中返回混合的值。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2012-11-20 17:26:03

代码语言:javascript
复制
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日期。

票数 1
EN

Stack Overflow用户

发布于 2012-11-20 17:24:15

以下查询为每种类型选择最高的created_at

代码语言:javascript
复制
SELECT type, MAX(created_at) FROM notification GROUP BY type ORDER BY type

不确定你想要如何与用户结合,你的问题不够精确。

以下查询为特定用户的每种类型选择最高created_at

代码语言:javascript
复制
SELECT user, type, MAX(created_at) 
  FROM notification 
 WHERE user = 34
 GROUP BY type, user 
 ORDER BY type, user
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13469990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档