这里是我的问题,我有一个表格(在一个Excel表格中,并使用Microsoft.ACE.OLEDB.12.0连接)和各种列,用于跟踪RF读卡器中的进/出卡刷卡下面的格式...提高性能的SQL
Date, Time Occurred, Employee Number, Employee Name, Location
2013-12-20, 11:10:23 AM, 123456, Tester, Door001 IN
2013-12-20, 11:21:44 AM, 123456, Tester, Door002 OUT
2013-12-20, 12:00:12 AM, 123456, Tester, Door001 IN
2013-12-20, 01:00:23 PM, 123456, Tester, Door002 IN
2013-12-20, 03:40:43 PM, 123456, Tester, Door001 OUT
2013-12-20, 05:00:58 PM, 123456, Tester, Door004 IN
2013-12-20, 05:50:02 PM, 123456, Tester, Door001 OUT
2013-12-20, 05:10:00 PM, 123456, Tester, Door002 OUT
2013-12-20, 11:00:01 PM, 123456, Tester, Door001 IN
2013-12-20, 09:10:23 AM, 789012, Developer, Door001 IN
2013-12-20, 10:00:44 AM, 789012, Developer, Door002 OUT
2013-12-20, 10:01:12 AM, 789012, Developer, Door003 IN
2013-12-20, 11:00:23 AM, 789012, Developer, Door004 OUT
2013-12-20, 02:40:43 PM, 789012, Developer, Door005 IN
2013-12-20, 01:00:58 PM, 789012, Developer, Door006 OUT
2013-12-20, 06:50:02 PM, 789012, Developer, Door007 IN
2013-12-20, 08:00:00 PM, 789012, Developer, Door008 IN
2013-12-20, 09:00:01 PM, 789012, Developer, Door009 OUT
我要在以下格式输出:
Date,Employee Id, Employee Name, First In Time, First In Door Name, Last out time, Last Out Door Name
2013-12-20, 123456, Tester, 12:00:12 AM, Door001 IN, 11:00:01 PM, Door001 OUT
2013-12-20, 789012, Developer, 9:10:23 AM, Door001 IN, 9:00:01 PM, Door009 OUT
注意第一时间和上次出时间的原始数据,同样首先来自同一列门名和最后门名
我有这个工作,但不表示我认为... 目前,我正在写一个SQL,从源表中获取不同的员工ID。
SELECT DISTINCT [Employee Number]
FROM [Sheet1$]
然后我火了两个单独的查询,以获得第一时间和第一门中的名店在Excel和火上期开出另一个查询并持续了门。
SELECT *
FROM [sheet1$]
WHERE ([employee number] = '" & Trim(rst.Fields(0).Value) & "')
AND (location LIKE '% IN%')
AND (
[sheet1$].[time occurred] >= '" & Format(startTime, "hh:mm:ss") & "'
AND [sheet1$].[time occurred] <= '" & Format(endTime, "hh:mm:ss") & "')
ORDER BY [time occurred] ASC
SELECT *
FROM [sheet1$]
WHERE ([employee number] = '" & Trim(rst.Fields(0).Value) & "')
AND (location LIKE '% OUT%')
AND (
[sheet1$].[time occurred] >= '" & Format(startTime, "hh:mm:ss") & "'
AND [sheet1$].[time occurred] <= '" & Format(endTime, "hh:mm:ss") & "')
ORDER BY [time occurred] DESC
对于给定的时间过滤器,为了得到“第一时间/门”我使用ASC排序和“最后一出/门”,我使用ASC/DESC排序,拿起从第一行结果。问题出现在一个典型的日子里,我可以看到大楼里有大约10000名独特的员工,因此针对每个员工号码发出两个查询(因此20000个查询)需要花费大量时间。此外,为了增加苦恼,我写这是一个VB宏,所以添加循环,如果块的条件等处理,它使得它有点痛苦地慢得到的数据。
只是想,如果我可以避免这些20000查询,并以某种方式只有一个查询所有这些提取,我认为它会更快。任何想法如何我可以通过在一个SQL中作为输出而不是20000个查询来减少逻辑? 仅供参考,我尝试使用JOIN的但不知何故,我没有得到它:(
正在使用哪个数据库引擎来处理查询? –