获取组中每一天的最后记录

Get Last Record for each day in a Group

我正在尝试获取每天的 Last/Latest 记录。对于 12 月 14 日,有两条记录我想获得下午 5 点的记录,因为它是那天的最后一条记录,但是如果你看到 row_number(rn = 2 & 3),那么它不会选择这条记录,只给我时间点记录今天(12 月 15 日,因为它的 rn = 1)。

ITCFID  ControlId   ResourceId  DateTime    rn
P05.01.03   CloudFront.1    AWS:::Acount:1111111111111  12/14/2021 5:00 PM  2
P05.01.03   CloudFront.1    AWS:::Acount:1111111111111  12/14/2021 06:01 AM 3

这是我正在使用的查询:

WITH
  Pointintimesecurityfindings AS (
    SELECT
      *
      , ROW_NUMBER() OVER (PARTITION BY ResourceId,ControlId,itcfid ORDER BY DateTime DESC) rn
    FROM itcf_final_summary_dashboard
)    
SELECT *
FROM Pointintimesecurityfindings
WHERE rn = 1

对于一个特定的ITCFID -> 可以有多个Control ID,Control ID可以有多个Resource ID。我想获取特定的 itcfid -> 唯一控制 ID -> 唯一资源 ID -> 获取当天的最新记录。

如果你想要每天最新的,你需要按天分区,例如

SQL 最初标记的服务器解决方案:

ROW_NUMBER() OVER (PARTITION BY
  ResourceId
  , ControlId
  , itcfid
  , DATEPART(year,[DateTime])
  , DATEPART(dayofyear,[DateTime]
) ORDER BY [DateTime] DESC) rn

更新问题的 Presto 解决方案:

ROW_NUMBER() OVER (PARTITION BY
    , ResourceId
    , ControlId
    , itcfid
    , DATE_FORMAT(Datetime,'%Y') 
    , DATE_FORMAT(Datetime,'%j')
    ORDER BY DateTime DESC
) rn