4

我有一个这样的数据库表:
在此处输入图像描述
希望我能把这个解释好,让你理解。

我想计算每个员工工作了多少小时。
例如,对于“Arjeta Domi”,我们有 Cell(2,3) - Cell(3,3) + Cell(4,3) + Cell(5,3),这使得每个 logOut 时间与 Login 时间不同。

在此处输入图像描述

我想要的决赛桌将有这些列:CardNo, UserName, Date, PauseTime,WorkTime

我试过这个查询:取自副本

SELECT DISTINCT
  [Card NO], 
  [User Name],  
  (
    SELECT
      MIN(DateTime) AS [Enter Time], 
      MAX(DateTime) AS [Exit Time], 
      MAX(DateTime) - MIN(DateTime) AS [Inside Hours] 
    FROM
      ExcelData
  ) 
FROM
  ExcelData
GROUP BY
  [Card NO], [User Name], DateTime

DateTimeColumn 的类型是,String而不是DateTime。我正在使用 MS Access 数据库。

4

2 回答 2

2

选择所有带有“m001-1-In”的行,日期时间为 I,并将合适的“m001-1-Exit”行添加到其中,子查询为 O,如下所示:

SELECT t1.[Card No], t1.[User Name],dateTime as I
,(Select TOP 1 dateTime from Tab t2 where  t2.[Card No]= t1.[Card No] 
and  t2.[User Name]= t1.[User Name] and  t2.Addr='m001-1-Exit' 
and t2.DateTime>t1.datetime ORDER by DateTime) as O
FROM Tab t1
where t1.Addr='m001-1-In' 

在此处输入图像描述

现在很容易封装它,显示如下 Prepared 并将我们的 SUM 和 Grouping 添加到此:

SELECT [Prepared].[Card No], [Prepared].[User Name], SUM(DateDiff('n',I,O))/60 AS Hours
FROM (
      SELECT t1.[Card No], t1.[User Name],dateTime as I
    ,(Select TOP 1 dateTime from Tab t2 where  t2.[Card No]= t1.[Card No] 
      and  t2.[User Name]= t1.[User Name] and  t2.Addr='m001-1-Exit' 
      and t2.DateTime>t1.datetime ORDER by DateTime) as O
FROM Tab t1
where t1.Addr='m001-1-In' 
)  AS [Prepared]
GROUP BY [Prepared].[Card No], [Prepared].[User Name]

如果您需要限制 DateRange 您将所需的条件添加到行where t1.Addr='m001-1-In'

于 2014-09-19T18:04:06.723 回答
-1

尝试这个:

SELECT CardNo, UserName, SUM(DATEDIFF('h',DateTime,(SELECT MIN(Datetime) 
                                                    FROM table as t2 
                                                    WHERE t1.CardNo=t2.CardNo
                                                        AND t2.Addr like '%Exit' 
                                                        AND t2.DateTime > t1.DateTime )))
FROM table as t1
WHERE Addr like '%In'
GROUP BY CardNo, UserName
于 2014-09-18T14:30:45.933 回答