我有一個查詢返回這個「表」下面的sql服務器。查詢使用一些連接將數據鏈接在一起。我想要做的就是將每位訪問員記錄在時間上,並且此時將NULL轉換爲時間。我如何將登錄和註銷日期時間戳記彙總爲登錄時間,然後將時間替換爲NULL - 在T-SQL中?
INTERVIEWER NUM_COMPLETES projectId loginDateTime logoutDateTime 002 2 43407 2011-09-20 22:59:15.193 NULL 004 1 43407 2011-09-20 23:06:32.287 NULL 007 1 43407 2011-09-20 23:02:30.930 NULL 007 1 43407 2011-09-20 00:37:01.213 2011-09-20 01:15:00.197 010 3 43407 2011-09-20 23:04:46.547 NULL 013 1 43407 2011-09-20 00:36:16.923 2011-09-20 01:14:59.440 029 3 43407 2011-09-20 22:58:55.083 2011-09-20 23:30:56.987 029 3 43407 2011-09-20 23:31:05.243 2011-09-21 00:02:27.560 029 3 43407 2011-09-21 00:02:55.527 NULL 032 1 43407 2011-09-20 22:59:19.590 NULL 036 1 43407 2011-09-20 23:02:33.497 NULL 041 1 43407 2011-09-20 22:59:55.020 NULL
應該變成
INTERVIEWER NUM_COMPLETES projectId TotalTime 002 2 43407 8 004 1 43407 10 007 1 43407 4 008 1 43407 7
這就像每面試官總結日期差異。
下面是一個簡單+消毒TSQL語句,我使用
SELECT tbl1.INTERVIEWER, tbl1.NUM_COMPLETES, tbl2.projectId, tbl2.loginDateTime, tbl2.logoutDateTime
FROM
(
SELECT k_Id, FirstName AS INTERVIEWER, COUNT(result) AS NUM_COMPLETES
FROM db1_table, db2_table
WHERE k_Id=Interviewer
GROUP BY k_Id, FirstName, result
) AS tbl1
INNER JOIN
(
SELECT projectId, loginDateTime, logoutDateTime, userId
FROM session_tbl
WHERE loginDateTime >= '2011-09-20 0:0:0.0' AND projectId = '43407'
) AS tbl2
ON tbl1.k_Id=tbl2.userId
ORDER BY INTERVIEWER
感謝您的幫助 - 我一直是這樣,過去幾天的掙扎!
您是否嘗試過轉換爲UNIX時間戳和總推導在數字值? –
這聽起來像它會工作,但我沒有真正處理MSSQL中的UNIX時間戳 – Ryan
可能的完整解決方案n需要考慮相交的登錄/註銷。 http://explainextended.com/2009/06/11/flattening-timespans-sql-server/ – Ryan