Я столкнулся со странным поведением с пробелами и островным решением. С 3 столбцами (3-й столбец не является целым числом), результат на самом деле является случайным. Давайте предположим, что мы следующий запрос:
Declare @Table1 TABLE
(
ID varchar(50),
yr float,
CO1 varchar(50)
);
INSERT INTO @Table1 (ID, yr, CO1)
VALUES ('I2','2011','ABE'), ('I2','2012','ABE'), ('I2','2013','ABE'),
('I2','2014','ABE'), ('I2','2014','ABE'), ('I2','2005','ABD'),
('I2','2006','ABD'), ('I2','2007','ABD'), ('I2','2008','ABD'),
('I2','2007','ABA CD'), ('I2','2011','ABA CD'), ('I2','2013','ABA CD');
SELECT
ID, CO1, StartSeqNo = MIN(yr), EndSeqNo = MAX(yr)
FROM
(SELECT
ID, yr, CO1,
rn = yr - ROW_NUMBER() OVER (PARTITION BY ID ORDER BY yr)
FROM
@Table1) a
GROUP BY
ID, CO1, rn ;
Результат, к которому я стремлюсь:
ID CO1 StartSeqNo EndSeqNo
----------------------------
I2 ABA CD 2007 2007
I2 ABA CD 2011 2011
I2 ABA CD 2013 2013
I2 ABD 2005 2008
I2 ABE 2011 2014
Я просмотрел stackoverflow и другие места, чтобы определить, что я что-то упустил. Я уже пробовал с Different и density_rank, ни один не дает должного результата
Вот отдельные и плотные запросы, которые я уже пробовал:
--- distinct
SELECT distinct ID,CO1, StartSeqNo=MIN(yr), EndSeqNo=MAX(yr)
FROM (
SELECT distinct ID, yr, CO1
,rn=yr-ROW_NUMBER() OVER (PARTITION BY ID ORDER BY yr)
FROM @Table1) a
GROUP BY ID, CO1, rn ;
--- with dense_rank
SELECT ID,CO1, StartSeqNo=MIN(yr), EndSeqNo=MAX(yr)
FROM (
SELECT ID, yr, CO1
,rn=yr-dense_rank() OVER (PARTITION BY ID ORDER BY yr)
FROM @Table1) a
GROUP BY ID, CO1, rn ;
Я не понимаю, почему гэп и островной запрос не будут работать с нецелым столбцом. Я считаю, что есть проблема с группировкой где-то. Пожалуйста, помогите мне с этим.
Sim