这只是一个关于SQL的简单问题,我无法找到解决方案。
table 2 AUditLog
Machine SettingCode User changeSTR timeChanged Order
A C1 U1 0->10 12/5/2020 10h00 1
A C1 U2 10->3 12/5/2020 10h07 1
A C1 U1 0->3 12/5/2020 11h00 3
我想对这个表AuditLog执行一次select操作,并且有。(在同一台机器、settingCode、Order的情况下)我希望得到最近更改的用户的结果。
Machine SettingCode LastUserChange Order
A C1 U2 1
A C1 U1 3
发布于 2020-05-12 22:15:09
一种简单且可移植的解决方案是使用相关子查询进行过滤:
select a.*
from auditLog a
where a.timeChanged = (
select max(a1.timeChanged)
from auditLog a1
where
a1.machine = a.machine
and a1.settingCode = a.settingCode
and a1.order = a.order
)
您也可以使用row_number()
,如果您的数据库支持窗口函数:
select *
from (
select
a.*,
row_number() over(
partition by machine, settingCode, a.order
order by timeChanged desc) rn
from auditLog a
) a
where rn = 1
注意,order
是一个SQL关键字,因此不是列名的好选择。
https://stackoverflow.com/questions/61762872
复制