繁体   English   中英

Sql Query for Ms access数据库

[英]Sql Query for Ms access database

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

请有人帮忙。请真的很感激,谢谢。

假设您的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;

BTW, DateTimeType是保留字,因此不是字段名称的理想选择。 虽然这些名称不是此查询的交易破坏者,但如果可能,您可以通过重命名这些字段来避免其他潜在的麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM