3

下面是我在 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

输出应比较时间并找出第一两行和接下来的 2(第 3 和第 4)行的差异所需的输出是,

EmpId   Date          Time
 1     9/12/2012     0:30:41
 1     9/12/2012     2:23:01

有人可以帮忙吗。非常感谢,谢谢。

4

1 回答 1

0

我认为这个查询接近你想要的,假设你的DateTime字段都是日期/时间数据类型。如果它们实际上是文本类型,您可以使用 转换它们的值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;

顺便说一句,DateTimeType保留字,因此不是作为字段名称的理想选择。尽管这些名称不会影响此查询,但如果可能的话,您可以通过重命名这些字段来避免其他潜在的麻烦。

于 2012-09-17T07:04:36.890 回答