繁体   English   中英

sql 获取 1 行上每个子组的组内子组的最小值

[英]sql get min of subgroup within group for each subgroup on 1 row

我正在尝试为所有子组查找子组的第一条消息。 结果应该在一行上。

这是一个示例架构。

CREATE TABLE test
    (`name` varchar(10), `message_id` int(10), `timing` datetime)
;

INSERT INTO test
VALUES
     ('John', 1, '2018-07-02 2:09:01'),
     ('Peter', 1, '2018-07-02 2:08:54'),
     ('John', 1, '2018-07-02 2:09:04'),
     ('Peter', 2, '2018-07-02 2:09:09')
;

http://www.sqlfiddle.com/#!9/56e480我可以设法在两个单独的查询中获取每个子组的第一条消息,但不是在一个单独的查询中:

select distinct message_id, min(timing) as first_message_peter from test
where name = 'Peter'
group by 1

导致:

message_id| first_message_peter 
1         | 2018-07-02 02:08:54 
2         | 2018-07-02 02:09:09 

我想要的是以下内容:

message_id| first_message_peter | first_message_john
1         | 2018-07-02 02:08:54 | 2018-07-02 02:09:01
2         | 2018-07-02 02:09:09 | NULL

有人可以帮助我朝着正确的方向前进吗?

您可以为此进行条件聚合:

select
    message_id,
    min(case when name = 'Peter' then timing end) first_message_peter ,
    min(case when name = 'John' then timing end) first_message_john
from test
where name in ('Peter', 'John')
group by message_id

更新了 DB Fiddle 上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM