1
我有我們的時間和考勤計時系統的交易數據,我必須計算區域中的總小時數。所以我使用row over partition創建了一個查詢來做到這一點。交易方向Row Over Partition minipulation
如果用戶正確使用他們的時鐘卡(這意味着方向跟在例如進入,出,進,出......等等),它工作正常。但是因爲我們不能總是依靠用戶這樣做,我們得到的數據是這樣的:
MSTSQ DATE DIRECTION TIME
----- ---------- --------- ------------
61 2013-03-12 IN 07:56:43.000
61 2013-03-12 OUT 09:58:19.000
61 2013-03-12 IN 10:16:05.000
61 2013-03-12 OUT 12:08:10.000
61 2013-03-12 OUT 12:08:11.000
61 2013-03-12 IN 12:08:11.000
61 2013-03-12 IN 12:11:04.000
61 2013-03-12 OUT 13:45:28.000
61 2013-03-12 IN 13:45:29.000
61 2013-03-12 IN 13:50:38.000
61 2013-03-12 OUT 16:28:11.000
61 2013-03-12 IN 16:28:12.000
我的SQL語句的工作方式如下:
WITH TIME_LIST
AS(
SELECT ROW_NUMBER() OVER (PARTITION BY TD.MSTSQ, TD.DATE ORDER BY TD.ID) RN
, TD.MSTSQ
, TD.DATE
, TD.DIRECTION
, TD.TIME
FROM TRANSACK_DETAILS TD
)
Select
currul.MSTSQ
, currul.DATE
, Convert(datetime, prevul.TIME - currul.TIME,108) [Time In Zone]
FROM TRANSACTIONS
INNER JOIN TIME_LIST currul ON currul.MSTSQ = TRANSACTIONS.MST_SQ
AND TRANSACTIONS.EVENT_DATE = currul.DATE
INNER JOIN TIME_LIST prevul ON currul.MSTSQ = prevul.MSTSQ
AND currul.DATE = prevul.DATE AND currul.Rn+1 = prevul.Rn
我的結果,那麼看起來是這樣的:
MSTSQ DATE Time In Zone
----- -------- ------------
61 20130312 02:01:36.000
61 20130312 00:17:46.000
61 20130312 01:52:05.000
61 20130312 00:00:01.000
61 20130312 00:00:00.000
61 20130312 00:02:53.000
61 20130312 01:34:24.000
61 20130312 00:00:01.000
61 20130312 00:05:09.000
61 20130312 02:37:33.000
61 20130312 00:00:01.000
現在我需要更改語句以僅計算IN和OUT(時區)方向之間的時間。
有關如何做到這一點的任何想法?
在此先感謝
你先生是一個紳士和學者。謝謝你的幫助。 – 2013-05-07 09:18:56
天哪,非常感謝! – 2013-05-07 09:22:44