【问题标题】:SQL SELECT Question of a current problem that I have to solve我必须解决的当前问题的 SQL SELECT 问题
【发布时间】:2020-08-28 22:50:55
【问题描述】:

只是一个简单的 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】:

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

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

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 2023-02-22
    • 2013-06-25
    • 2020-10-04
    • 2022-06-16
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多