以下のクエリを使用して、2 つの時間レコード間の時差を取得しています
;WITH x AS
(
SELECT *,
rn = ROW_NUMBER() OVER (PARTITION BY PersonRFID ORDER BY TimeStamp)
FROM AISDb
)
SELECT y.ID,x.ID,x.PersonName,x.PersonRFID, DATEDIFF(MINUTE, x.TimeStamp, y.TimeStamp)
FROM x INNER JOIN x AS y
ON x.PersonRFID = y.PersonRFID
AND x.rn = y.rn - 1
WHERE x.Action = 'OUT'
AND y.Action = 'IN';
ID Name PERSONRFID ACTION LOGREAD TIMESTAMP DATESTAMP
1 Kashif Islam E20010018303014826000F5A IN True 20:43:00 1/16/2013
8 Kashif Islam E20010018303014826000F5A IN True 12:22:00 1/26/2013
10 Kashif Islam E20010018303014826000F5A OUT True 12:22:00 1/26/2013
11 Aamir Munir E20010018303020025901029 IN True 12:22:00 1/26/2013
15 Aamir Munir E20010018303020025901029 OUT True 11:46:00 1/29/2013
25 Kashif Islam E20010018303014826000F5A OUT True 12:41:00 1/29/2013
問題は、同じ日に IN OUT ペアを作成するのと同じ日に良い結果が得られることです。しかし、同じ日に次の OUT が見つからない場合、たとえば 2013 年 1 月 16 日の日付で ID が 1 の場合、OUT アクションを取得しないため、ID 25 とペアになります。これは行うべきではありません。要するに、日付も処理し、同じ日付の IN OUT 紙を作成し、そうでない場合は無視するクエリが必要です。親切に助けてください