使用 SQL Server 2000
假期(表)
dates
2012-08-02
2012-08-19
2012-08-20
表格1
id dates time
001 01/08/2012 00:00
001 02/08/2012 00:00
001 03/08/2012 00:00
001 04/08/2012 12:00
...
...
001 17/04/2012 11:00
001 18/08/2012 00:00
001 19/08/2012 00:00
001 20/08/2012 00:00
001 21/08/2012 12:00
...
我想检查每列的上一个日期和下一个日期,然后我想更新现在或缺席或假期。
条件
- 如果当前行时间不等于 00:00,则状态应为
P
(当前) - 如果上一个日期时间列是 00:00 并且下一个日期时间列是 00:00 那么自动当前行状态应该是
AB
(缺席), - 如果日期等于假期表日期,则自动当前行状态应为
H
注意:这个查询运行没有任何失败,唯一的问题是耗时......
询问
Select
t2.id,
t2.dates,
case
when t2.time <> '00:00'
then 'P'
when t4.dates = t2.dates and t1.intime = '00:00' and t3.intime = '00:00'
then 'AB'
else 'H'
end as attn
from
(
Select id, dates, time from table1
where t1.dates = Cast('18/08/2012' as datetime)
) t1
left outer join
(
Select id, dates, time from table1
where t2.dates = Cast('19/08/2012' as datetime)
) t2
on t1.id = t2.id
left outer join
(
Select id, dates, time from table1
where t2.dates = Cast('20/08/2012' as datetime)
) t3
on t2.id = t3.id
left outer join
(
select dates from holiday
) t4
on t4.dates = t2.dates
上面的查询工作正常,但显示需要更多时间,因为我想查看每个的数据01/09/2012
,我有 n 个 id,系统正在检查每个 id 的上一个日期和下一个日期并显示结果。 30/09/2012
id
任何其他替代查询或解决方案都可用于显示数据