我有以下表格:
ID Rating Rating_from Rating_to
1 2 2010-01-01 2011-01-01
1 2 2011-01-02 2012-02-01
1 3 2012-02-02 2013-03-01
1 2 2013-03-02 2013-04-01
1 2 2013-04-02 9999-12-31
它包含每个ID的一个评分,这是在特定情况下进行检查的。每次检查评分时,将给最后一行一个
Rating_to
日期,通常是新评分前一天,并输入一行新记录,其中Rating_from
日期为实际评分当天。而Rating_to
会被设置为9999-12-31
而不是NULL
。经常情况下,评级保持不变。有时候,评级会发生变化。一个ID可能随着时间推移重新获得它曾经拥有的评级。如何获取每个ID每个评级的最早
Rating_from
日期和最新Rating_to
日期,而不将具有相同评级值但与其他评级交错的评级分组?我正在尝试获取以下表格:
ID Rating Rating_from Rating_to
1 2 2010-01-01 2012-02-01
1 3 2012-02-02 2013-03-01
1 2 2013-03-02 NULL
使用上述数据,我尝试按
ID
和Rating
分组(并在from和to字段上设置MIN()
和MAX()
),但是我只得到了两行,一个是评分为2,另一个是评分为3,即使有两个评分为2的时期。我向同事请教,他建议使用
LAG()
和LEAD()
,但我不确定它如何在此处帮助。数据位于SQL Server 2017中,并且有大约一百万个ID。非常欢迎任何建议。我已添加以下
TABLE CREATE
脚本,包括真实表格数据,希望这有所帮助:CREATE TABLE tbl(
id INT,
rating int,
rating_from DATE,
rating_to DATE
);
INSERT INTO tbl VALUES
(1, 2, '2014-05-23', '2015-04-13'),
(1, 2, '2015-04-14', '2015-06-02'),
(1, 2, '2015-06-03', '2016-05-31'),
(1, 2, '2016-06-01', '2018-03-22'),
(2, 1, '2016-06-01', '9999-12-31'),
(3, 3, '2016-06-01', '9999-12-31'),
(1, 2, '2018-03-23', '2018-08-06'),
(1, 3, '2018-08-07', '2018-08-21'),
(1, 2, '2018-08-22', '2018-09-19'),
(1, 2, '2018-09-20', '9999-12-31');