下午好,
我有一个有趣的问题,我想把堆栈溢出社区。我们在数据仓库(SQL Server)中有一个数据集,该数据集具有唯一标识符,并且该标识符需要几个月的时间。例如,如果有人在2018年12月查看了此行,并在下面看到了以下行:
Row ID BeginDate EndDate Unique ID Amount
178484 2018-01-01 2018-01-31 GroupID1 387.22
176555 2018-03-01 2018-03-31 GroupID1 751.07
170120 2018-04-01 2018-04-30 GroupID1 567.48
172037 2018-09-01 2018-09-30 GroupID1 587.51
179024 2018-10-01 2018-10-31 GroupID1 63.42
182061 2018-11-01 2018-11-30 GroupID1 728.04
我们希望通过某种方式识别丢失的丢失行(月份)。例如,上面将插入以下行
重要的是要注意,这显然不是数据库中唯一的行分组。此外,我们将避免使用游标。我们尝试使用一个游标和一个包含所有有效值的临时表来执行此操作。但我希望有一种更快的方法来解决这个问题。
对此,我们将不胜感激。
祝一切顺利, 乔治·埃瓦兹
答案 0 :(得分:1)
简单
SELECT M MonthNumber,
DATENAME(Month, DATEADD(Month, M, -1)) MonthName
FROM T RIGHT JOIN
(VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)) TT(M)
ON MONTH(T.BeginDate) = TT.M
WHERE T.BeginDate IS NULL;
返回:
+-------------+-----------+
| MonthNumber | MonthName |
+-------------+-----------+
| 2 | February |
| 5 | May |
| 6 | June |
| 7 | July |
| 8 | August |
| 12 | December |
+-------------+-----------+
答案 1 :(得分:0)
请尝试使用“ NOT EXISTS”(不存在)脚本查看其是否满足您的要求。
Thread