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

Posted

技术标签:

【中文标题】获取组中每一天的最后记录【英文标题】: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 -> 获取当天的最新记录。

【问题讨论】:

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

以上是关于获取组中每一天的最后记录的主要内容,如果未能解决你的问题,请参考以下文章

如何获取一周中每一天的密码?

Laravel 获取数组中每一天的最新数组项

在几天的持续时间内,选择表格中记录的每一天的最后一个条目

mysql查询某段时间段中每一天的数据

sql 获取某一时段中每一天中最大的时间的一条记录

[Luogu2422]良好的感觉