SQL 分区按日期范围

标签 sql sql-server tsql

假设这是我的表:

ID  NUMBER  DATE
------------------------
1   45      2018-01-01
2   45      2018-01-02
2   45      2018-01-27

我需要使用 partition by 和 row_number 分开,其中一个日期和另一个日期之间的差异大于 5 天。上面例子的结果是这样的:
ROWNUMBER   ID  NUMBER  DATE
-----------------------------
1           1   45      2018-01-01
2           2   45      2018-01-02
1           3   45      2018-01-27

我的实际查询是这样的:
SELECT ROW_NUMBER() OVER(PARTITION BY NUMBER ODER BY ID DESC) AS ROWNUMBER, ...
但正如您所注意到的,它不适用于日期。我怎样才能做到这一点?

最佳答案

您可以使用 lag功能 :

select *, row_number() over (partition by number, grp order by id) as [ROWNUMBER]
from (select *, (case when datediff(day, lag(date,1,date) over (partition by number order by id), date) <= 1 
                      then 1 else 2 
                 end) as grp
      from table
     ) t;

关于SQL 分区按日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51593992/

相关文章:

java - 我是否必须避免使用 Spring Data 的 native sql?

sql-server - 错误: TCP Provider: Error code 0x2746. 在通过终端在linux 中设置Sql 期间

sql - 在不使用分组或透视的情况下对动态字段表应用搜索条件

tsql - 始终返回上周周一至周日的数据

sql - 验证 T-SQL 查询的方法?

sql-server - dbo.dbo 这个有效吗?

sql - 在一个词中搜索文字

sql - 表中最接近的时间戳

c# - 应用程序启动失败,因为并行配置不正确

mysql - 查找特定预订时长内有可用时段的日期