https://www.db -fiddle.com / f / 2bzoKxbU2gznwwmQpMmjp5 / 0
(фактическая база данных - Microsoft SQL Server 2014)
Выше приведено описание того, что яя пытаюсь сделать.
CREATE TABLE IF NOT EXISTS table1 (
id nvarchar(5) NOT NULL,
year int(4) NOT NULL,
PRIMARY KEY (id,year)
);
INSERT INTO table1 (id, year) VALUES
('A', '2013'),
('A', '2014'),
('A', '2017'),
('A', '2018'),
('B', '2016'),
('B', '2017'),
('B', '2018'),
('C', '2016'),
('D', '2014'),
('D', '2016'),
('D', '2018');
Это примерно то, с чем я работаю, и хочу найти количество последовательных / последовательных записей для каждого идентификатора, который также содержит «2018» встолбец года.
Пока что мой мыслительный процесс выглядит так:
select id, count(*)
from table1
group by id;
select main.id,
case when in_2018.id is not null
then count(*)
else 0
end
from table1 as main
left join table1 as in_2018
on in_2018.id = main.id
and
in_2018.year = 2018
group by main.id;
/*
Want a table:
A | 2
B | 3
C | 0
D | 1
Count of records that are in a single-step incremental that include 2018 by id
*/
Очевидно, что они не возвращают последовательные строки, а просто подсчитывают, которые соответствуют критериям «2018».
Я попробовал другой подход, который проверяет:
case when count(*) = max(year) - min(year) +1,
В моем примере данных это работает для идентификатора B, потому что все данные B являются последовательными, но это не относится к нарушенной схемедругие идентификаторы.