[英]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
请有人帮忙。请真的很感激,谢谢。
假设您的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
是保留字,因此不是字段名称的理想选择。 虽然这些名称不是此查询的交易破坏者,但如果可能,您可以通过重命名这些字段来避免其他潜在的麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.