Как отфильтровать подмножество результатов, если оно не содержит желаемой даты? - PullRequest
0 голосов
/ 22 января 2020

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

Можно ли отфильтровать StoreId, у которых нет нужного объема на нужную дату в SQL?

У меня есть запрос, который выглядит следующим образом:

SELECT CAST(DATE AS DATE), StoreId, COUNT(CustomerId) AS Customer_Volume
FROM CustomerTable
WHERE 1=1
      AND DATE >= DATEADD(DAY, -5, GETDATE())
GROUP BY StoreId, CAST(DATE AS DATE)
ORDER BY 2,1

Данные выглядят следующим образом:

Date       | StoreId | Customer_Volume
---------------------------------
2020-01-18 |     7   |    10
2020-01-19 |     7   |     8
2020-01-20 |     7   |     8
2020-01-21 |     7   |    12
2020-01-18 |    11   |     4
2020-01-19 |    11   |     2

Поэтому мне интересно, есть ли возможность отфильтровать StoreId = 11 в этом примере.

Ответы [ 2 ]

1 голос
/ 22 января 2020

Оконные функции - это один из методов:

SELECT CAST(DATE AS DATE), StoreId, COUNT(CustomerId) AS Customer_Volume
FROM CustomerTable
WHERE DATE >= DATEADD(DAY, -5, GETDATE()) AND
      EXISTS (SELECT 1
              FROM CustomerTable ct
              WHERE ct2.StoreId = ct.StoreId AND
                    ct2.Date = CURDATE() - INTERVAL 1 DAY
             )
GROUP BY StoreId, CAST(DATE AS DATE)
ORDER BY 2,1

Предполагая, что самая последняя интересующая дата - вчера, вы можете использовать коррелированный подзапрос, чтобы убедиться, что данные доступны.

0 голосов
/ 22 января 2020

Вы можете отфильтровать с помощью customer_volume

SELECT CAST(DATE AS DATE), StoreId, case when COUNT(CustomerId) AS Customer_Volume
FROM CustomerTable
WHERE 1=1
      AND DATE >= DATEADD(DAY, -5, GETDATE())
GROUP BY StoreId, CAST(DATE AS DATE)
having COUNT(CustomerId)> 0
ORDER BY 2,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...