web-dev-qa-db-ja.com

SQL:同じ月の2つの異なる年のデータを比較するクエリを作成できますが、同じ日を優先度と見なしますか

参考:SQL Server 2012を使用しています。

関数のスコープは曜日によって異なる販売日であるためです(顧客訪問率の比較など)。

したがって、昨年と今年を比較する主なキーは、その月に最も関連し、同じ日(月曜日、火曜日、...)である同じ週または同じ日をチェックすることです。

2018-November2017-November

例えば:

2018/11/01 should compare to 2017/11/02 (Thu)
2018/11/02 should compare to 2017/11/03 (Fri)
...
2018/11/30 should compare to 2017/12/01 (Fri)

頭の中で構文を想像することはできません。構文とは何ですか?このスコープを達成するために呼び出すキーワード、関数は何ですか?

このような何らかの機能についての経験がある人は誰でも助けてください。すべてのコメントをいただければ幸いです。

3
Natta Wang

あなたの質問を正しく理解していれば、2つ(以上)の方法を使用できますが、どちらも [〜#〜] datepart [〜#〜] 関数に関連しています。

DECLARE @Date1 datetime = '20181101';
DECLARE @Date2 datetime = '20170101';

SELECT DATEPART(DAYOFYEAR, @Date1) DayOfYear,
       DATEPART(WEEK, @Date1) WeekNumber,
       DATEPART(WEEKDAY, @Date1) WeekDay,
       @@DATEFIRST FirstDayOfWeek;

DayOfYear | WeekNumber | WeekDay | FirstDayOfWeek
--------: | ---------: | ------: | :-------------
      305 |         44 |       5 | 7

DayOfYearの使用

SELECT DATEADD(DAY, DATEPART(DAYOFYEAR, @Date1), @Date2) AS UsingDayOfYear;

| UsingDayOfYear      |
| :------------------ |
| 02/11/2017 00:00:00 |

同じ週と同じ曜日を使用

これは 週の最初の日 に依存します:

SET DATEFIRST 1;

SELECT DATEADD(DAY, ((DATEPART(WEEK, @Date1) - 1) * 7) + DATEPART(WEEKDAY, @Date1), @Date2) UsingSameMonthSameDayOfWeek;

UsingSameMonthSameDayOfWeek |
| :-------------------------- |
| 02/11/2017 00:00:00         |

この関数を使用して、別の組み合わせを追加できます。たとえば、11月の最初の木曜日です。

db <> fiddle ここ

3
McNets