sql - 在几年内每周获取最新条目
问题描述
我有下表来存储实体的历史记录:
Date Id State
-------------------------------------
2017-10-10 1 0
2017-10-12 1 4
2018-5-30 1 8
2019-4-1 2 0
2018-3-6 2 4
2018-3-7 2 0
我想在一周内获得每个 ID 的最后一个条目,例如
Date Id State
-------------------------------------
2017-10-12 1 4
2018-5-30 1 8
2019-4-1 2 0
2018-3-7 2 0
我会尝试使用Partition by
:
select
ID
,Date
,State
,DatePart(week,Date) as weekNumber
from TableA
where Date = (
select max(Date) over (Partition by Id Order by DatePart(week, Date) Desc)
)
order by ID
但它仍然每周给我一个以上的结果。
解决方案
您可以使用ROW_NUMBER()
:
SELECT a.*
FROM (SELECT a.*, ROW_NUMBER() OVER (PARTITION BY a.id, DATEPART(WK, a.Date) ORDER BY a.Date DESC) AS Seq
FROM tablea a
) a
WHERE seq = 1
ORDER BY id, Date;
推荐阅读
- php - 单选按钮相互抵消,可以检查多个,并且必须只有一个
- akeneo - 通过 AKENEO PIM 的 API 获取产品组列表
- arrays - 在 Julia 中对一维数组的所有元素求和
- android - Unity 设置与 GIT 存在平台相关冲突
- windows - 将参数传递给 fsquirt.exe
- excel-formula - 如何使用 COUNTIFS 从多个条件范围内相互排他地计数?
- node.js - Sequelize 不从 .env 文件中获取主机名,默认为机器的 IP 地址
- python-3.x - 如何使用 boto3 连接 S3 存储桶并访问 csv 文件?
- algorithm - “合并”事件队列的正确术语是什么?
- visual-studio - 如何将下载的 .pfx 证书分配给 azure devops 中的一个项目