我有一张桌子,可以保存一年中的所有日期/月份
E.G。
Day Month
1 9
2 9
3 9
4 9
5 9
6 9
7 9
... ...
我有一个表格,显示不同数据集的日期范围
E.G。
DataSet DateRange
webshop 2013-09-20
webshop 2013-09-21
webshop 2013-09-22
webshop 2013-09-23
webshop 2013-09-24
webshop 2013-09-25
webshop 2013-09-26
webshop 2013-09-27
webshop 2013-09-28
webshop 2013-09-29
webshop 2013-09-30
我如何比较两个表以显示该特定月份的DataSet中缺少的天数
E.G。对于我上面的数据集为webshop
的示例,它缺少日期范围01/09/2013 - 19/09/2013
感谢您的帮助!
答案 0 :(得分:7)
您可以使用CTE并将查询编写为:
declare @StartDate DATE, @EndDate DATE
set @StartDate = '2013-09-01';
set @EndDate = '2013-09-30';
WITH DateRange(Date) AS
(
SELECT
@StartDate Date
UNION ALL
SELECT
DATEADD(day, 1, Date) Date
FROM
DateRange
WHERE
Date < @EndDate
)
SELECT 'webshop',Date
FROM DateRange
EXCEPT
SELECT DataSet,DateRange
FROM ImportedDateRange
WHERE DataSet='webshop'
--You could remove Maximum Recursion level constraint by specifying a MaxRecusion of zero
OPTION (MaxRecursion 10000);
答案 1 :(得分:2)
如果您的主表是
#Temp(Title varchar(10),DateRange date)
你可以做像
这样的事情CREATE TABLE #ALLDATE(Date1 date)
DECLARE @startDate DATE='9/1/2013'
DECLARE @endDate DATE='9/30/2013'
insert into #ALLDATE
SELECT [Date] = DATEADD(Day,Number,@startDate)
FROM master..spt_values
WHERE Type='P'
AND DATEADD(day,Number,@startDate) <= @endDate
select 'webshop',Date1
from #ALLDATE
where Date1 not in
(select DateRange from #Temp where Title='webshop' and MONTH(GETDATE())=9)