2016-05-16 158 views
1

假設其中包含了狀態,RecordFromDate和RecordThruDate領域以及其他領域的歷史表..查詢年齡

考慮到一個新的記錄可以爲任何的改變來創建任何字段,而不僅僅是狀態字段,如何找到狀態字段保持其當前值的時間長度?

當前記錄的RecordThruDate由'9999-12-31'表示。

注意,最後兩個記錄都需要被計算在內

somefield, status, recfromdate, recthrudate 
'abc', 1, '2016-04-01', '2016-04-10' 
'abc', 2, '2016-04-11', '2016-04-16' 
'def', 2, '2016-04-17', '2016-04-19' 
'def', 3, '2016-04-20', '2016-04-25' 
'ghi', 3, '2016-04-26', '9999-12-31' 

回答

1

下得到的以前的狀態的最大日期相同的狀態和每個日期:

select max(h.RecordThruDate) 
from history h 
where h.status <> (select h2.status 
        from history h2 
        where h2.recordthrudate = '9999-12-31' 
       ); 

您可能想要添加「1」來獲取日期。要獲得持續時間,請從getdate()中減去結果。

+0

比我做得更簡單。謝謝! –

0

鑑於你的問題的措辭,你會不會只根據當前記錄的RecordFromDate選擇年齡?如果我誤解了,請用示例輸出的具體/樣本數據&來澄清您的問題。

DECLARE @HistoryTable TABLE (RecordStatus VARCHAR(100), RecordFromDate DATETIME, RecordThruDate DATETIME) 

INSERT INTO @HistoryTable (RecordStatus, RecordFromDate, RecordThruDate) 
VALUES ('Pending','2016-01-01 09:34:05','2016-04-01 19:34:43'), 
     ('Approved','2016-04-01 19:34:43','2016-05-09 11:45:43'), 
     ('Shipped','2016-05-09 11:45:32','9999-12-31 00:00:00') 

SELECT *, DATEDIFF(DD,RecordFromDate,GETDATE()) AS AgeInDays 
FROM @HistoryTable 
WHERE RecordThruDate='9999-12-31'