SQL SELECT问题,我必须解决

问题描述 投票:0回答:1

只是一个我无法弄清楚解决方案的简单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
sql select greatest-n-per-group
1个回答
0
投票

一种简单且可移植的解决方案是使用相关子查询进行过滤:

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关键字,因此对于列名不是一个好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.