我在SQL Server中遇到了一个我认为非常简单的查询(我正在使用2018)

我有一个表(AUDIT_table),我对其具有只读访问权限,如下所示:

ID DimensionA DimensionB DimensionC Amount UserID Timestamp
1 ABC DEF GHI 100 Mark 2022/01/01 12:00:00
2 ABC DEF GHI 10 James 2022/01/01 06:00:00
3 ABC DEF GHI 250 Mark 2022/01/01 02:00:00
4 JKL MNO PQR 250 Bob 2022/01/01 13:00:00
5 JKL MNO PQR 100 Dave 2022/01/01 12:00:00

我试图找到的是审计表中最近的条目,需要通过组合多个列来确定分组.例如,(维度A+维度B+维度C)相同的所有行都被视为同一记录,我们希望找到该记录的最新条目.在上表中,ID 1、2和;3相同(ABC+DEF+GHI),ID 4&5个相同(JKL+MNO+PQR).

因此,使用上面的示例表,我试图编写一个select语句来返回此结果:

Dimension A Dimension B Dimension C Amount UserID Timestamp
ABC DEF GHI 100 Mark 2022/01/01 12:00:00
JKL MNO PQR 250 Bob 2022/01/01 13:00:00

我try 了这个查询(在许多其他组合中),但无法得到我想要的结果:

SELECT DimensionA, DimensionB, DimensionC, Amount, 
UserID, Max(Timestamp), (DimensionA + DimensionB + DimensionC) AS POV
FROM AUDIT_TABLE
GROUP BY POV

任何帮助都将不胜感激.

推荐答案

这行吗?

select DimensionA,
       DimensionB,
       DimensionC,Amount,UserID,TimeStamp
from (select DimensionA,
             DimensionB,
             DimensionC,Amount,UserID,TimeStamp,
             row_number() over(partition by DimensionA,DimensionB,DimensionC order by Timestamp desc) as rn
      from AUDIT_TABLE ) as T
where rn = 1     

DB<>Fiddle

Reference

Sql相关问答推荐

如何更改函数返回的列名?

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

查询多个表并返回合并在联合列上的所有表中的所有行

用于动态查询情况的存储过程常识模式

在SQL中使用类别值将行转置为列

从日期开始向前填充重复项

UPDATE查询中的乐观锁

NULL-生成的列中连接的字符串的输入

SQL计数条目大于日期,包括交叉表中的零

从结果SQL查询中排除空值

违反了完整性约束-值存在时找不到父键

其中使用表名作为;行值;记录?

在Postgres,什么是;.USSTZ;在';YYYY-MM-DD;T;HH24:MI:SS.USSTZ';?

查询以从时间范围列表中查找唯一时间段

如何在android房间中进行多个加入

如何从postgresql中的项目映射(关联数组)设置值?

Postgres如何在一个日历周中前进和回填值

获取记录的上一个值,并将其与当前值一起显示

带聚合函数的 percentile_cont

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索