Группа не работает правильно для диапазона дат в SQL - PullRequest
1 голос
/ 31 марта 2019

У меня есть такая таблица:

created_date  | id | status | completed_date
2019-03-20    | 1  | Open   | 
2019-03-20    | 2  | Open   | 
2019-03-19    | 3  | Comp   | 2019-03-21
2019-03-21    | 4  | Comp   | 2019-03-22
2019-03-22    | 5  | Comp   | 2019-03-22
2019-03-18    | 6  | Open   | 

Я хочу найти количество всех ID, которые были созданы до '2019-03-21' и имели статус 'Open' ИЛИ они были созданы до '2019-03-21' и даже имели статус 'Comp', но они были завершены после '2019-03-21'.

Ниже приведен мой запрос:

SELECT 
    CAST(CREATED AS DATE),
    COUNT(DISTINCT id)
FROM testtable
WHERE
    (CAST(CREATED AS DATE) <= '2019-03-21' AND status = 'Open')
    OR (
        CAST(CREATED AS DATE) <= '2019-03-21' AND status='Comp' 
        AND CAST(COMPLETED AS DATE) > '2019-03-21' 
    )

Это дает правильный результат. то есть 21-го числа 4 удостоверения личности были открыты. Но сейчас я хочу эту информацию за последние 4 дня. Как мне изменить этот запрос, чтобы сделать это ??

Вывод должен быть:

created_date | count(ID)
2019-03-21   | 4
2019-03-20   | 4
2019-03-19   | 2
2019-03-18   | 1

Пожалуйста, помогите !!

1 Ответ

0 голосов
/ 31 марта 2019

Вот решение, которое корректно работает с вашими примерами данных. Он генерирует список дат с использованием различных значений, которые можно найти в столбце created_date, а затем LEFT JOIN s с таблицей. Условия JOIN несут логику, которую вы описали. Мне кажется, что вам не нужно проверять status записей, так как, по-видимому, любая запись, которая не является NULL completed_date, находится в статусе Comp.

SELECT 
    dt.created_date,
    COUNT(t.id)
FROM 
    (SELECT DISTINCT created_date FROM mytable) dt
    LEFT JOIN mytable t
        ON t.created_date <= dt.created_date 
        AND (t.completed_date IS NULL OR t.completed_date > dt.created_date)
GROUP BY dt.created_date

Это Демонстрация на DB Fiddle с вашими примерами возвращаемых данных:

| created_date | COUNT(t.id) |
| ------------ | ----------- |
| 2019-03-18   | 1           |
| 2019-03-19   | 2           |
| 2019-03-20   | 4           |
| 2019-03-21   | 4           |
| 2019-03-22   | 3           |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...