нужен активный список клиентов по дням между выбранными датами, которые имеют начальную и конечную даты (также ноль) - PullRequest
0 голосов
/ 08 октября 2018

нам нужен результат отсутствия активных клиентов в период с 1-го по 2-й день

у клиента будет начальная и конечная даты через какое-то время, как ноль. Я хочу, чтобы активный клиент находился между двумя датами в отношении результатов дня

cust    strdate         end
1     2018-01-01      null
2     2018-01-01    2018-01-03
3     2018-01-02    2018-01-02
4     2018-01-04     null

мой результат для внешних пройденных дат с 2018-01-01 по 2018-01-04

day         count
2018-01-01    2
2018-01-02    3
2018-01-03    2
2018-01-04    2

1 Ответ

0 голосов
/ 08 октября 2018

Один вариант использует таблицу календаря для представления всех дат, которые вы хотите увидеть.Для примера ваших данных мы можем просто жестко закодировать даты в CTE.С фактическими данными вы хотели бы создать диапазон дат.Это означает, что подзапрос под псевдонимом d будет заменен фактической таблицей / представлением, содержащим даты, диапазон которых вы хотите включить в запрос.

SELECT
    d.date,
    COUNT(*) AS count
FROM
(
    SELECT '2018-01-01' AS date UNION ALL
    SELECT '2018-01-02' UNION ALL
    SELECT '2018-01-03' UNION ALL
    SELECT '2018-01-04'
) d
LEFT JOIN yourTable t
    ON d.date >= t.strdate AND (d.date <= t.enddate OR t.enddate IS NULL)
GROUP BY
    d.date
ORDER BY
    d.date;

enter image description here

Демо

В этом ответе предполагается, что если конечной датой будет NULL, то это означает, что правая часть диапазонаполностью открыт, т. е. все даты будут совпадать при условии, что даты их начала также находятся в пределах диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...