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