SQL Server日期范围,每月或每季度
我在SQL Server表中有一个日期列表,需要找出几个单独的主题: 首先,日期是每月还是每季度?日期总是从一个月的第一天开始 例如,一个序列可能是SQL Server日期范围,每月或每季度,sql,sql-server,date,Sql,Sql Server,Date,我在SQL Server表中有一个日期列表,需要找出几个单独的主题: 首先,日期是每月还是每季度?日期总是从一个月的第一天开始 例如,一个序列可能是01/01/13、01/02/13、01/03/13、01/04/13、01/05/13,因此每月(英国) 例如,另一个序列可能是01/12/12、01/03/13、01/06/13、01/09/13、01/12/13,因此每季度(英国) 第二,第一个可以解决的问题是,所有的日期都存在吗?没有空隙。我解决这个问题的一种方法是说要么是每月/每季度,要么
01/01/13、01/02/13、01/03/13、01/04/13、01/05/13
,因此每月(英国)
例如,另一个序列可能是01/12/12、01/03/13、01/06/13、01/09/13、01/12/13
,因此每季度(英国)
第二,第一个可以解决的问题是,所有的日期都存在吗?没有空隙。我解决这个问题的一种方法是说要么是每月/每季度,要么就是不知道,但那是在C#中
谢谢您可以使用
DATEDIFF()
函数来比较两个日期,您还可以使用自联接和行号()函数来比较不同行的日期:
;WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY dt) RN
FROM Table1)
SELECT DATEDIFF(day,a.dt,b.dt)
FROM cte a
JOIN cte b
ON a.RN = b.RN-1
SELECT DATEDIFF(day,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Days
,DATEDIFF(quarter,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Quarters
FROM Table2
如果您使用的是SQL 2012,则可以使用LEAD()
函数比较不同行的值:
;WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY dt) RN
FROM Table1)
SELECT DATEDIFF(day,a.dt,b.dt)
FROM cte a
JOIN cte b
ON a.RN = b.RN-1
SELECT DATEDIFF(day,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Days
,DATEDIFF(quarter,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Quarters
FROM Table2
演示:我有点明白你的想法。第二排是一个很好的开始,谢谢