連続した日付範囲をグループ化して、各範囲の最小日付と最大日付を表示しようとしています。今のところ私はこれに似たソリューションを使用しています:http://www.sqlservercentral.com/articles/T-SQL/71550/しかし、私はSQL 2000を使っていますので、いくつかの変更を加えなければなりませんでした。これはこれまでの私の手続きです:連続した日付でグループ化し、SQLで週末を無視する
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
私は1つの問題を除いて私が望むとおりに動作します:週末。データセットには週末の日付は記録されていないため、見つかったグループは最大5日間です。例えば、以下の結果では、私は10/6のdateRangeStartと10/20のdateRangeEndで、単一のレコードとして表示するために、最後の3つのグループをしたいと思います:
いくつかはありますその休憩がちょうど週末の場合、これを設定して日付範囲内の休憩を無視することができますか?
ありがとうございました。
パーマネントを作成しないのはなぜ週番号欄のカレンダーテーブル? –
@Martinにこれを詳しく説明できますか?私はdatepartを使っていつも週番号を得ることができましたが、これが私のグループ分けの変更にどのように役立つか分かりません。 – Colin
ああ私は問題を間違って読む。 –