を得ることに興味を持っている場合、これは動作するはずです。このお試しください:あなたはのCTEに参加することができます
CREATE TABLE #A (Person INT, StartDate DATE, EndDate DATE)
INSERT INTO #A
SELECT '123','1/1/2016', '5/1/2016'
CREATE TABLE #B(Person INT, EffectiveDate DATE)
INSERT INTO #B
SELECT 123 ,'1/1/2016' UNION ALL
SELECT 123 ,'2/1/2016' UNION ALL
SELECT 123 ,'4/1/2016' UNION ALL
SELECT 123 ,'5/1/2016'
;WITH A1
AS(
SELECT PERSON , StartDate, EndDate
FROM #A
UNION ALL
SELECT PERSON ,DATEADD(MM,1,STARTDATE), EndDate
FROM A1
WHERE DATEADD(MM,1,STARTDATE) <= EndDate
)
SELECT PERSON , StartDate
FROM A1
WHERE
NOT EXISTS
(
SELECT 1 FROM #B B1
WHERE B1.Person = A1.PERSON
AND YEAR(B1.EffectiveDate) = YEAR(A1.STARTDATE) AND MONTH(B1.EffectiveDate) = MONTH(A1.STARTDATE)
)
を月の数字 – scsimon
月を決定するものは?テーブルAの開始日が04/01/2016、終了日が07/01/2016の場合、04〜07の間に毎月のレコードがあるはずですか? – Kramb
こんにちはKramb。はい、毎月の応募がありますが、欠落している月を探す必要があります。もちろん、異なる人物レコードのために各テーブルには何千ものレコードがあります。ある期間中に支払いを逃したことに似ています。 – Dacotahsky