有一个名为 '**work**'
包含如下数据:
Id Name a_Column work_datetime
-----------------------------------------
1 A A_1 1592110166
2 A A_2 1592110166
3 A A_3 1592110164
4 B B_1 1582111665
5 B B_2 1592110166
6 C C_1 1592110166
如果我运行查询 A
以及 max(work_datetime)
,则可以有2个选择用于 Name='A'
但我只需要一个 a_Column='A_1'
最终期望输出如下follows:-
Id Name a_Column work_datetime
-----------------------------------------
1 A A_1 1592110166
5 B B_2 1592110166
6 C C_1 1592110166
mysql似乎不支持在groupby中处理重复记录!
有什么办法能达到要求的结果吗?
2条答案
按热度按时间dwbf0jvd1#
一个适用于所有mysql版本的简单选项是使用子查询进行过滤:
对于每个
name
,这带来了最新的work_datetime
; 通过挑选最小的一排来打破关系a_column
(我就是这样理解你的要求的)。为了提高性能,您需要一个索引
(work_datetime, a_column, id)
.b09cbbtk2#
因为版本8你可以使用
row_number()
为每一行指定一个编号,按时间的降序对每一行的位置进行编号。在派生表中执行此操作,然后只选择该数字所在的行1
从它那里。与
row_number()
没有重复项。如果有两行具有相同的名称和时间,则随机选择其中一行。如果要保留副本,可以替换row_number()
与rank()
.