2011-07-27 53 views
1

表名取奇數和偶數行:員工的SQL Server:查詢從表銀泰和退房時間

Id          EmployeeName FingerId 
8b6c653e-6b20-46f2-89a1-45ed3b453345  xyz   19 
8b6c653e-6b20-46f2-89a1-45ed3b453876  abc   17 

表名:INOUT

No AutoId         Fingerid  LogTime    Date 
1 8b6c653e-6b20-46f2-89a1-45ed3b45369c  19   10:43:36 AM  7/27/2011 
2 b4246d49-df99-4355-9327-4703a7642b32  19   10:45:00 AM  7/27/2011 
3 274e64e4-e95b-4a1c-815c-9aee9c2d3ac8  19   11:30:20 AM  7/27/2011 
4 f7197cb8-3a76-4c75-b801-9df545ff67b1  19   12:30:00 PM 7/27/2011 
5 43230f6d-6872-4ce4-8f3a-ceb74d757722  19   12:30:55 PM 7/27/2011 

我要爲這個存儲過程表(INOUT)其中具有特定僱員的Fingerid,特定手指和日期的LogTime

這裏在上表中有同日的5個條目的19 2011年7月27日

我想查詢其是組按日期和按時間排序與秒和

  • 1結果在時間和2記錄OUT TIME
  • 3記錄的時間和4記錄OUT TIME

像奇應及時處理,甚至應該是OUT TIME

,及時間進出添還時差Ë

輸出我想:

EmployeeName InTime   OutTime   Date   DifferenceTimeperiod 
    XYZ   10:43:00 AM  10:45:00 AM  7/27/2011  00:2:00 mints 
+1

員工「xyz」在您的第一張表中有「FingerId = 22」 - 但它似乎從您的第二張表中選擇了「FingerId = 19」的數據.....以及您如何區分IN和OUT第二張桌子?只是「奇怪」和「偶數」排「索引」似乎是一個非常脆弱和不安全的方法....一點都不清楚...... –

+1

你好像忽略了秒部分。我們在同一分鐘內用兩次測量做什麼?另外,出現在輸出的第3行(對於輸入行5)?你真的沒有測量/記錄任何確定INOUT中的每一行代表是及時還是不及時的目標嗎? –

+0

差異IN和OUT形成第二張表,它應該形成「LogTime」奇數記錄將在IN TIME,甚至記錄將是OUT TIME。這將按日期分組並按時間排序 – Bhoomi

回答

1

我有一個類似的問題這一點,與報警日誌:

CREATE TABLE dbo.AlarmLogs([TimeStamp] datetime, Incoming bit, AlarmID int) 

這不得不項與進入和淘汰(1,0),所以我知道警報何時開啓或關閉。然而,有時會有幾個輸入信號逐步淘汰之前,即

2011/01/01 13:55:43, 1, 246 
2011/01/01 13:55:48, 1, 246 
2011/01/01 13:56:14, 0, 246 
2011/01/01 13:57:38, 1, 246 
2011/01/01 13:58:16, 0, 246 

我花了很長時間試圖用各種SQL技術來解決這個問題,包括自我聯接等,但現在已經有一個光標解決它。

雖然遊標的使用應該儘可能少,但有些時候它們實際上執行得更快,而這是其中之一。

光標簡單地遍歷排序的表,並在發現結束時間後將鬧鐘插入結果表。

希望有所幫助。