【发布时间】:2011-03-10 16:44:47
【问题描述】:
我正在尝试对连续的日期范围进行分组,以显示每个范围的最小和最大日期。到目前为止,我使用了与此类似的解决方案:http://www.sqlservercentral.com/articles/T-SQL/71550/ 但是我使用的是 SQL 2000,所以我必须进行一些更改。到目前为止,这是我的程序:
create table #tmp
(
date smalldatetime,
rownum int identity
)
insert into #tmp
select distinct date from testDates order by date
select
min(date) as dateRangeStart,
max(date) as dateRangeEnd,
count(*) as dates,
dateadd(dd,-1*rownum, date) as GroupID
from #tmp
group by dateadd(dd,-1*rownum, date)
drop table #tmp
除了一个问题:周末,它完全按照我想要的方式工作。我的数据集没有周末日期的记录,这意味着找到的任何组最多为 5 天。例如,在下面的结果中,我希望最后 3 个组显示为一条记录,dateRangeStart 为 10/6,dateRangeEnd 为 10/20:
如果休息时间只是周末,我是否可以通过某种方式将其设置为忽略日期范围内的休息时间?
感谢您的帮助。
【问题讨论】:
-
为什么不创建一个带有周数列的永久日历表?
-
@Martin 你能详细说明一下吗?我总是可以使用 datepart 获得周数,但我不明白这将如何帮助改变我的分组。
-
哦,对了,我看错了问题。
标签: sql sql-server-2000 sql-date-functions