查询年龄
问题描述:
假设其中包含了状态,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'
答
下得到的以前的状态的最大日期相同的状态和每个日期:
select max(h.RecordThruDate)
from history h
where h.status <> (select h2.status
from history h2
where h2.recordthrudate = '9999-12-31'
);
您可能想要添加“1”来获取日期。要获得持续时间,请从getdate()
中减去结果。
答
鉴于你的问题的措辞,你会不会只根据当前记录的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'
比我做得更简单。谢谢! –