此问题在此处已有答案:
How to select the first row for each group in MySQL?(16个回答)
Retrieving the last record in each group - MySQL(34个回答)
20天前关闭。
我尝试使用max(..)从集合中获取最大值,但我也想获取与此行对应的其他行值。
SELECT user_id,
max(login_time) as last_login_time,
task_name as last_task_worked_on
FROM user_tasks
WHERE user_id IN (123, 456, 789) group by user_id;
字符串
下面是我使用的DB模式和一些示例值:
create table user_tasks (
user_id int(11),
login_time datetime,
task_name varchar(50) )
insert into user_tasks values (123, '2023-01-30 06:10:03', 'walk dog');
insert into user_tasks values (123, '2023-02-30 06:10:03', 'bathe dog');
insert into user_tasks values (123, '2023-05-30 06:10:03', 'feed dog');
insert into user_tasks values (456, '2023-03-30 06:10:03', 'feed dog');
insert into user_tasks values (456, '2023-02-30 06:10:03', 'walk dog');
insert into user_tasks values (456, '2023-01-30 06:10:03', 'bathe dog');
insert into user_tasks values (789, '2023-03-30 06:10:03', 'feed dog');
insert into user_tasks values (789, '2023-01-30 06:10:03', 'walk dog');
insert into user_tasks values (789, '2023-05-30 06:10:03', 'bathe dog');
insert into user_tasks values (898, '2023-05-30 06:10:03', 'walk dog');
insert into user_tasks values (900, '2023-05-30 06:10:03', 'bathe dog');
型
上面的SELECT语句产生以下结果:
'123','2023-05-30 06:10:03','walk dog'
'456','2023-03-30 06:10:03','feed dog'
'789','2023-05-30 06:10:03','feed dog'
型
但是,第一个值应该是“feed dog”而不是“walk dog”,最后一个值应该是“bathe dog”而不是“feed dog”。
中间的值是正确的,但只是因为“feed dog”恰好对应于第一行,这也是max(login_time)值。
我想要的输出是这样的:
'123','2023-05-30 06:10:03','feed dog'
'456','2023-03-30 06:10:03','feed dog'
'789','2023-05-30 06:10:03','bathe dog'
型
1条答案
按热度按时间0tdrvxhp1#
怎么做?
首先获取每
user_id
的最新 login_time:字符串
然后将此数据集与表连接以获得预期的输出:
型
结果如下:
型