基本上这是一个报告系统,用户每天报告他们的活动,因此我想检查那些不报告日常活动的用户。
我使用此查询加入2个表格,以检查在特定日期报告的人员
SELECT DISTINCT Report.InputDate, User.ID, User.Name
FROM User JOIN Report on User.ID = Report.ID
WHERE Report.InputDate BETWEEN '2014-02-01' AND '2014-02-04'
ORDER BY Report.InputDate
因此,如果有人在2014-02-02没有报告,结果将是:
2014-02-01 | Guy | 01 |
2014-02-03 | Guy | 01 |
我正在寻找的是如何检查查询中日期范围内未报告的人,结果将是:
2014-02-02 | Guy | 01 |
(如果可能的话,它会显示一行,其中的日期甚至没有人报告,所以如果没有人在2014-02-01报告结果的话):
2014-02-01 | | |
*的更新
假设表User中的列是:ID,Name
表格报告中的列是:ID,InputDate
另一个表ReportDetail包含列:ID,ActivityType
答案 0 :(得分:0)
尝试执行此
SELECT DISTINCT Report.InputDate, User.NIMK, User.NamaLengkap
FROM User JOIN Report on User.ID = Report.ID
WHERE not (Report.InputDate between '2014-02-01' AND '2014-02-04')
ORDER BY Report.InputDate
答案 1 :(得分:0)
我认为您需要列出每个日期状态(现在或不存在)
Declare @startdate date='2014-02-01'
Declare @enddate date= '2014-02-04'
;with cte as
(Select @startdate as dt
union all
select DATEADD(day,1,dt) dt from cte a
where DATEADD(day,1,dt) <=@enddate )
,cte1 as
(
SELECT DISTINCT Report.InputDate, User.NIMK, User.NamaLengkap
FROM User JOIN Report on User.ID = Report.ID
WHERE Report.InputDate BETWEEN '2014-02-01' AND '2014-02-04'
)
--select dt from cte --check this one
select * from cte a left join cte1 b on a.dt=b.InputDate -- correct this yourself