只是一个我无法弄清楚解决方案的简单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并具有。 (在同一台机器上,则为settingCode,Order)我希望对最近更改的用户产生结果。
Machine SettingCode LastUserChange Order
A C1 U2 1
A C1 U1 3
一种简单且可移植的解决方案是使用相关子查询进行过滤:
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关键字,因此对于列名不是一个好的选择。