下面是ms访问中的表结构,
SNo Time EmpId Date Type
-------------------------------------------
1 09:20:53 AM 1 9/12/2012 IN
2 09:50:12 AM 1 9/12/2012 OUT
3 09:52:09 AM 1 9/12/2012 IN
4 12:15:10 PM 1 9/12/2012 OUT
输出应比较时间并找到前两行和下两行(第3和第4行)的差异 需要的输出是,
EmpId Date Time
1 9/12/2012 0:30:41
1 9/12/2012 2:23:01
有人可以请你帮忙。真的很感激,谢谢。
答案 0 :(得分:0)
我认为此查询接近您的要求,假设您的Date
和Time
字段都是日期/时间数据类型。如果它们实际上是文本类型,则可以使用CDate()
转换其值。但无论哪种方式,我认为使用单个字段来保存两者日期和时间而不是为每个字段分别显示一个查询会更容易。
SELECT
sub.SNo,
sub.EmpId,
sub.Type,
sub.start_time,
sub.end_time,
Format(sub.end_time - sub.start_time, 'h:nn:ss') AS duration
FROM
(
SELECT
o.SNo,
o.Date + o.Time AS end_time,
o.EmpId,
o.Type,
(
SELECT TOP 1 i.Date + i.Time
FROM YourTable AS i
WHERE
i.Type = 'IN'
AND i.EmpId = o.EmpId
AND i.Date + i.Time < o.Date + o.Time
ORDER BY i.Date, i.Time DESC
) AS start_time
FROM YourTable AS o
WHERE o.Type='OUT'
) AS sub;
BTW,Date
,Time
和Type
是保留字,因此不是字段名称的理想选择。虽然这些名称不是此查询的交易破坏者,但如果可能,您可以通过重命名这些字段来避免其他潜在的麻烦。