日期:2014-05-17  浏览次数:20764 次

Sql查询没打卡的用户
需求:

一张打卡记录表  Record{Id,Created(dateTime),UserId}
用户表 User{id,Name}
Record表的UserId是 User表的主键,Created就是 打卡日期。

现在 选择一个时间范围,如 2013-03-25至 2013-03-28 四天,我要查询这 4天没有打卡的用户,就是Record没有记录的用户。
要求显示 用户名Name 和 没有打卡的 日期。 如
User1  2013-03-25
User1  2013-03-26
User2  2013-03-25....


多天的查询就不会了,麻烦各位看看。谢谢!
Sql

------解决方案--------------------
select b.id ,b.name,a.Created from user b , record a

where a.Created between  '2013-03-25'and '2013-03-28'

and b.id not in (select userid from a where a.Created between  '2013-03-25'and '2013-03-28')

------解决方案--------------------
select m.* from
(
select a.dt , b.id from
(
select '2013-03-25' dt union
select '2013-03-26' dt union
select '2013-03-27' dt union
select '2013-03-28'
) a , user b
) m
where not exists(select 1 from Record n where n.UserId = m.id and datediff(dd,n.Created,m.dt) = 0)
ordeer by m.id , m.dt