В SQL у меня есть таблица со студентами:
CREATE TABLE dbo.[Student]
(
[Id] bigint IDENTITY(1,1) NOT NULL CONSTRAINT [PK_Student] PRIMARY KEY NONCLUSTERED,
[ActiveFrom] [DATETIME] NOT NULL,
[ActiveUntil] [DATETIME] NULL,
) ON [PRIMARY]
Теперь я хочу показать гистограмму, сколько студентов было активным в каждом месяце года.Студент активен в течение месяца, если [ActiveFrom] раньше или в этом месяце, а [ActiveUntil] равен нулю или позже, или в этом месяце.
Я полагаю, мне нужна какая-то группа, но поскольку студентможет быть активным в течение нескольких месяцев или лет. Я понятия не имел, как получить эти числа в одной команде SQL.
Пример ввода
INSERT INTO Student (ActiveFrom, ActiveUntil) VALUES ('20181001', '20181231')
INSERT INTO Student (ActiveFrom, ActiveUntil) VALUES ('20181101', '20190131')
INSERT INTO Student (ActiveFrom, ActiveUntil) VALUES ('20181201', '20181231')
INSERT INTO Student (ActiveFrom, ActiveUntil) VALUES ('20190101', '20190430')
Ожидаемый результат
Month, Activecount
2018-10, 1
2018-11, 2
2018-12, 3
2019-01, 2
2019-02, 1
2019-03, 1
2019-04, 1