MySQL: 按日期获取列行顺序的不同值
MySQL: Get distinct values of column row order by date
我正在尝试获取一组按日期降序排序且列 (zone_id) 的值不重复的结果,但我找不到正确的查询。
我真正感兴趣的列是第 2 列(zone_id),但我已经显示了 id 列,以便更清楚地显示我想要获得的结果。
简单按日期排序的table有如下数据:
id
zone_id
updated_at
206
63
2021-05-11 09:22:19
205
63
2021-05-11 09:21:53
204
22
2021-05-11 09:21:38
5
33
2021-05-10 10:45:09
6
23
2021-05-10 10:45:09
3
3
2021-05-10 10:45:02
137
63
2021-03-06 17:02:25
143
67
2021-03-03 20:24:14
98
14
2020-11-06 14:49:44
177
29
2020-08-16 20:09:26
因此,在这种情况下,它应该接收的值应该是:
63, 22, 33, 23, 3, 67, 14, 29
我尝试了以下查询但没有成功:
SELECT zone_id, id, updated_at
FROM table
GROUP BY zone_id
ORDER BY updated_at DESC
shows: 23, 33, 3, 67, 84, 63, 88, 98,...
SELECT DISTINCT zone_id, id, updated_at
FROM table
ORDER BY updated_at DESC
shows: 63, 63, 22, 33, 23, 3, 63, 67,...
拜托,有人能告诉我我做错了什么吗?
非常感谢您:
我认为您希望row_number()
为每个区域选择一行然后排序:
select t.*
from (select t.*,
row_number() over (partition by zone_id order by updated_at desc) as seqnum
from t
) t
where seqnum = 1
order by updated_at desc;
你可以像下面那样做 -
SELECT ZONE_ID FROM
(
SELECT zone_id, updated_at
FROM table
GROUP BY zone_id
) T
ORDER BY updated_at DESC
我正在尝试获取一组按日期降序排序且列 (zone_id) 的值不重复的结果,但我找不到正确的查询。
我真正感兴趣的列是第 2 列(zone_id),但我已经显示了 id 列,以便更清楚地显示我想要获得的结果。
简单按日期排序的table有如下数据:
id | zone_id | updated_at |
---|---|---|
206 | 63 | 2021-05-11 09:22:19 |
205 | 63 | 2021-05-11 09:21:53 |
204 | 22 | 2021-05-11 09:21:38 |
5 | 33 | 2021-05-10 10:45:09 |
6 | 23 | 2021-05-10 10:45:09 |
3 | 3 | 2021-05-10 10:45:02 |
137 | 63 | 2021-03-06 17:02:25 |
143 | 67 | 2021-03-03 20:24:14 |
98 | 14 | 2020-11-06 14:49:44 |
177 | 29 | 2020-08-16 20:09:26 |
因此,在这种情况下,它应该接收的值应该是:
63, 22, 33, 23, 3, 67, 14, 29
我尝试了以下查询但没有成功:
SELECT zone_id, id, updated_at
FROM table
GROUP BY zone_id
ORDER BY updated_at DESC
shows: 23, 33, 3, 67, 84, 63, 88, 98,...
SELECT DISTINCT zone_id, id, updated_at
FROM table
ORDER BY updated_at DESC
shows: 63, 63, 22, 33, 23, 3, 63, 67,...
拜托,有人能告诉我我做错了什么吗?
非常感谢您:
我认为您希望row_number()
为每个区域选择一行然后排序:
select t.*
from (select t.*,
row_number() over (partition by zone_id order by updated_at desc) as seqnum
from t
) t
where seqnum = 1
order by updated_at desc;
你可以像下面那样做 -
SELECT ZONE_ID FROM
(
SELECT zone_id, updated_at
FROM table
GROUP BY zone_id
) T
ORDER BY updated_at DESC