Я работаю с таблицей с именем appointments
, столбцы которой:
schedule_at: datetime doctor_id: целочисленное описание: текст done_at: datetime
Я хочу получить COUNT для всехвстречи, которые закончились, сгруппированы по doctor_id
, а также сгруппированы по набору интервалов дат, которые варьируются в зависимости от заданного набора входных данных.Входные данные, которые я получаю: from
, который является датой, и to
, который также является датой.
Первый вариант использования, который я хочу решить, - это разделение результатов по месяцам от заданного from
иto
.Итак, если мне дают from
= '2018-02-03' и to
= '2018-10-03', я хочу получить СЧЕТ всех назначений, которые закончились для каждого врача И за каждый месяц с2018-02
до 2018-10
.
Я знаю, как сделать группу по doctor_id, но я не могу понять, как также группировать по этим динамическим интервалам дат.
Вот чтоУ меня так далеко:
SELECT COUNT(*)
FROM appointments
WHERE finished_at IS NOT NULL
GROUP BY doctor_id
Я знаю, что если бы у меня были интервалы заранее, я мог бы сделать столько запросов, сколько мне нужно, поэтому я бы в итоге выполнил один запрос длякаждый месяц, например:
SELECT COUNT(*)
FROM appointments
WHERE finished_at IS NOT NULL
AND scheduled_at BETWEEN '2018-02-01' AND '2018-03-01'
GROUP BY doctor_id
SELECT COUNT(*)
FROM appointments
WHERE finished_at IS NOT NULL
AND scheduled_at BETWEEN '2018-03-01' AND '2018-04-01'
GROUP BY doctor_id
Мне просто интересно, есть ли способ сделать это в SQL, поэтому мне просто нужно сделатьодин запрос.