【问题标题】:Get Last Record for each day in a Group获取组中每一天的最后记录
【发布时间】:2022-01-19 02:25:09
【问题描述】:

我正在尝试获取每天的最后/最新记录。对于 12 月 14 日,有两条记录我想获得 5 PM 记录,因为它是当天的最后一条记录,但是如果您看到 row_number(rn = 2 & 3),那么它不会选择这条记录,只给我今天的 pointintime 记录( 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 -> Unique Control ID -> Unique ResourceID -> 获取当天的最新记录。

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 注明。让我更新

标签: amazon-athena presto


【解决方案1】:

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

最初标记的 SQL Server 解决方案:

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

【讨论】:

  • 我正在使用 Athena,它说功能 DATEPART 未注册。
  • 是的,我的错。大多数 sql 函数都可以在 athena 中运行,但它不能。
  • 小调整使用 date_parse 而不是 DATEPART,DATE_TRUNC 不起作用。但是非常感谢您的帮助。
  • 当然可以,它可能对某人有帮助
  • , ROW_NUMBER() OVER (PARTITION BY ResourceId , ControlId , itcfid , date_format(Datetime,'%Y'), date_format(Datetime,'%j') ORDER BY DateTime DESC) rn
猜你喜欢
  • 2017-12-15
  • 2016-09-03
  • 2021-07-23
  • 2020-09-29
  • 2023-01-28
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多