2015-09-01 76 views
0

我有一個查詢顯示集合中的行,每一行集合將有兩個記錄由1和2標識。它基本上是輸入和輸出時間。有時用戶會多次衝數據。例如,當他在'衝'時,他可能會多次衝擊以確保,但實際上他應該只衝1次。當衝出'出'時,他可能會多次衝擊以確保,但實際上他應該只衝1次。每個條目都會記錄時間。我需要配置下面的查詢來獲取多個條目的第一次條目或記錄。更準確地說,如果在5分鐘內有多個條目,那麼只有第一條記錄被顯示,忽略了在特定5分鐘時間內的其餘條目。在5分鐘內只顯示多個條目的第一條記錄

SELECT TransactionID, TrDate, Time1, Tr_Serial, Port, UnitNo, UserPIN,Finger, 
     IP, UnitName, Tr_Description, 
     CASE WHEN ROW_NUMBER() OVER (PARTITION BY userpin, TrDate 
     ORDER BY trdate, time1) % 2 = 0 
     THEN '2' 
     ELSE '1' 
     END Tr_Type 
     FROM (
     SELECT row_number() OVER (
     ORDER BY datetime) TransactionID, cast([datetime] AS date) TrDate, cast(
     [datetime] AS time) Time1, [eventserial] Tr_Serial, '1' Port, [READERID] 
     UnitNo, [EVENTID] Tr_Type, [USERID] UserPIN, '1' Finger, 'NA' IP, [ 
     READERNAME] UnitName, [EVENTNAME] Tr_Description 
     FROM [BBC].[dbo].[BBC_LOG]) A 
     WHERE Tr_Type = 47 OR Tr_Type = 55 

謝謝。

回答

0
SELECT TransactionID, TrDate, MIN(Time1), Tr_Serial, Port, UnitNo, UserPIN,Finger, 
    IP, UnitName, Tr_Description, 
    CASE WHEN Min(ROW_NUMBER()) OVER (PARTITION BY userpin, TrDate 
    ORDER BY trdate, time1) % 2 = 0 
    THEN '2' 
    ELSE '1' 
    END Tr_Type 
    FROM (
    SELECT row_number() OVER (
    ORDER BY datetime) TransactionID, cast([datetime] AS date) TrDate, cast(
    [datetime] AS time) Time1, [eventserial] Tr_Serial, '1' Port, [READERID] 
    UnitNo, [EVENTID] Tr_Type, [USERID] UserPIN, '1' Finger, 'NA' IP, [ 
    READERNAME] UnitName, [EVENTNAME] Tr_Description 
    FROM [BBC].[dbo].[BBC_LOG]) A 
    WHERE Tr_Type = 47 OR Tr_Type = 55 

試試這個 不知道你的輸出是什麼,但我知道你在你的日期時間需要MIN(),得到的第一個日期/時間即第一用戶主頻與