【发布时间】:2012-01-06 17:18:14
【问题描述】:
我有一个名为“日志”的表,其中包含以下值:
CheckDate CheckType CheckTime
-------------------------------------------
2011-11-25 IN 14:40:00
2011-11-25 OUT 14:45:00
2011-11-25 IN 14:50:00
2011-11-25 OUT 14:55:00
2011-11-25 IN 15:00:00
2011-11-25 OUT 15:05:00
2011-11-25 IN 15:15:00
2011-11-25 OUT 15:20:00
2011-11-25 IN 15:25:00
2011-11-25 OUT 15:30:00
2011-11-25 OUT 15:40:00
2011-11-25 IN 15:45:00
我想使用前面的表格来产生以下结果:
CheckDate CheckIn CheckOut
-----------------------------------------
2011-11-25 14:40:00 14:45:00
2011-11-25 14:50:00 14:55:00
2011-11-25 15:00:00 15:05:00
2011-11-25 15:15:00 15:20:00
2011-11-25 15:25:00 15:30:00
2011-11-25 NULL 15:40:00
2011-11-25 15:45:00 NULL
到目前为止,我已经想出了这个结果集:
CheckDate CheckIn CheckOut
-----------------------------------------
2011-11-25 14:40:00 14:45:00
2011-11-25 14:50:00 14:55:00
2011-11-25 15:00:00 15:05:00
2011-11-25 15:15:00 15:20:00
2011-11-25 15:25:00 15:30:00
2011-11-25 15:45:00 NULL
问题是我无法在没有 CheckIns 的情况下生成日志:
CheckDate CheckIn CheckOut
-----------------------------------------
2011-11-25 NULL 15:40:00
CheckIn - CheckOut 配对顺序和顺序是时间值递增的。
编辑:这是我当前的查询
SELECT Ins.CheckDate,
Ins.CheckTime,
Outs.CheckTime
FROM (SELECT CheckDate,
CheckTime
FROM Logs
WHERE CheckType = 'I') Ins
FULL OUTER JOIN
(SELECT CheckDate,
CheckTime
FROM Logs
WHERE CheckType = 'O') Outs
ON Ins.CheckDate = Outs.CheckDate AND
Ins.CheckTime < Outs.CheckTime
【问题讨论】:
-
“到目前为止我已经想出了这个结果集”:你能分享一下 SQL 吗?
-
你能发布你有给你结果的查询吗?
-
是日志表的完整范围还是每个条目都有其他键?能否包含用于生成当前结果集的 SQL?
-
我修复了更新引入的回归问题。它现在应该涵盖所有可能的情况。
标签: sql sql-server-2005 tsql outer-join