在sql日期范围内使用时无法获取记录

问题描述:

当我在SQL中使用以下查询时,没有记录返回。在sql日期范围内使用时无法获取记录

select distinct e.No from attendance a 
inner join Employee e on a.EmployeeId =e.No 
where e.No not in (select EmployeeId from attendance where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00') 

但是,当我单日期而不是日期范围,它工作正常。例如

select distinct e.No from attendance a 
inner join Employee e on a.EmployeeId =e.No 
where e.No not in (select EmployeeId from attendance where AttendanceDate = '2017-06-06 00:00:00') 

有人可以帮我解决这个问题,因为我必须使用日期范围,而不是特定的日期。

+0

您确定应该返回该日期范围内的数据吗? –

+0

是的,因为它会在单独的日期返回记录 – ASK

+0

您是否尝试过'2017-05-26'和'2017-06-06'之间? –

如果您在where语句中运行select,您会得到任何结果吗?

尝试没有它的时候:

between '2017-05-26' and '2017-06-06' 

什么日期格式,您使用的?

+0

是的,它返回记录。并在2017-05-26 00:00:00格式 – ASK

我想你混淆了有关查询的逻辑:

select distinct e.No 
from attendance a 
inner join Employee e 
    on a.EmployeeId = e.No 
where e.No not in 
(
    select EmployeeId from attendance 
    where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00' 
) 

如果子查询是返回Employee表中的每个员工号,那么你还是会回到从没有记录查询。这就是WHERE NOT IN (...)的行为。我的猜测是单日期查询似乎是“正常工作”的原因是没有员工记录与该日期匹配,因此您的结果集不是空的。

如果您预期的是相反的行为,那么也许您应该将WHERE e.No NOT IN更改为WHERE e.No IN

+0

我必须找到所有那些在这些日子在场的员工,但没有出席考勤记录(考勤表中没有记录) 所以我的逻辑工作完美在单一日期罚款。我已经用两张桌子交叉检查过了。但是当我给出日期范围时,它只是不返回任何记录 – ASK

+0

“它只是不返回任何记录”......然后如我所说,也许你打算做'在哪里'。你尝试过吗? –

+0

实际上没有..子查询返回在考勤表中有记录的所有这些员工ID,所以我只是取消选择这些ID使用不在和获取其余ID在上述日期出席表中没有记录 – ASK