我正在尝试为所有子组查找子组的第一条消息。结果应该在一行上。
这是一个示例架构。
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
关于mysql - sql 获取 1 行上每个子组的组内子组的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713174/