假设一个历史表包含Status,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'
答案 0 :(得分: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()
中减去结果。
答案 1 :(得分:0)
考虑到你的问题的措辞,你不只是根据当前记录的RecordFromDate选择年龄吗?如果我误解,请详细说明您的问题/样本数据&amp;样本输出。
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'