declare @stdate date set @stdate = '2015-2-01'
declare @eddate date set @eddate = '2015-02-28'
if object_id('tempdb.dbo.#t') is not null
drop table #t
create table #t(
columnA char(2) null,
columnB char(2) null,
salesdate date
)
insert into #t values ('A','a','2014-10-31')
insert into #t values ('A','b','2014-11-1')
insert into #t values ('A','c','2015-3-2')
insert into #t values ('A','d','2015-3-5')
insert into #t values ('B','a','2014-11-22')
insert into #t values ('B','b','2014-12-1')
insert into #t values ('B','c','2015-1-2')
insert into #t values ('B','d','2015-2-5')
insert into #t values ('B','e','2015-3-5')
insert into #t values ('C','a','2014-11-5')
insert into #t values ('C','b','2014-11-8')
insert into #t values ('C','c','2015-3-2')
insert into #t values ('D','a','2014-12-5')
insert into #t values ('D','b','2014-12-8')
insert into #t values ('D','c','2015-1-2')
insert into #t values ('D','d','2015-2-2')
insert into #t values ('D','e','2015-3-2')
查询出所选时间段(@stdate到@eddate)三个月内没有数据的columnA值
求这样一段语句
最后得出来的结果是
columnA
----------
A
C
------解决思路----------------------
--逻辑:比较有条件和没有条件的count()是否相等:
declare @stdate DATETIME set @stdate = '2014-12-01'
declare @eddate DATETIME set @eddate = '2015-02-28'
SELECT *
FROM (
SELECT columnA,COUNT(1) AS ucount
FROM #t
WHERE salesdate NOT BETWEEN @stdate AND @eddate
GROUP BY columnA
) AS r
JOIN(
SELECT columnA,COUNT(1) AS ucount
FROM #t
GROUP BY columnA
) AS t ON t.columnA=r.columnA AND t.ucount=r.ucount
------解决思路----------------------
SELECT * FROM(SELECT columnA FROM #t GROUP BY columnA)T这边是向前推两个月的情况
WHERE columnA NOT IN
(SELECT columnA FROM #t
WHERE salesdate BETWEEN DATEADD(MONTH,-2,@stdate)AND @eddate)
这边的IN属标量查询~