Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
Добрый вечер
Подскажите пожалуйста как выбрать всех покупателей между двух дат, что совершали больше двух покупок каждый weekend без рекурсии

Create table shop
Customer varchar(50) 
Datte datetime 
Product varchar(20) 
22 ноя 16, 15:47    [19921318]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
juliassy,

group by
having
22 ноя 16, 15:51    [19921352]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
Владислав Колосов,

Не получается
Ведь мне надо чтобы покупатель между двумя датами во все выходные совершил больше двух покупок
Он может и в один выходной купить два раза и это тоже считается
22 ноя 16, 15:57    [19921392]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
И так за все выходные указанного периода
22 ноя 16, 15:58    [19921401]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
HAVING SUM(CASE (@@DATEFIRST+DATEPART(WEEKDAY,Datte))%7 IN(0,1) THEN 1 ELSE 0 END)>2
22 ноя 16, 16:08    [19921467]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
iap,
Немного не поняла с case и datefirst объясните пожалуйста глупой студентке
22 ноя 16, 16:22    [19921574]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
juliassy
выбрать всех покупателей между двух дат, что совершали больше двух покупок каждый weekend

Если кто-то сделал 2 покупки в субботу и 1 в воскресенье, а заданный период дат включает только воскресенье - его НЕ включать?

В подзапросе отберите в заданном промежутке только те записи, для который WEEKDAY - суббота или воскресенье, сгруппируйте по неделе, посчитав COUNT, во внешнем запросе сгруппируйте по клиенту, оставив тех, у кого MIN(COUNT) больше 2.
22 ноя 16, 16:38    [19921644]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
;WITH cte
AS
(
    SELECT Customer
          ,Datte
          ,Product
          ,DENSE_RANK() OVER(PARTITION BY Customer ORDER BY CASE (@@DATEFIRST+DATEPART(dw,Datte))%7
                                                                WHEN 0 THEN CAST(Datte as date)
                                                                ELSE CAST(DATEADD(d,-1,Datte) AS DATE)
                                                            END) AS WeekendNum
      FROM shop
     WHERE Datte BETWEEN @Date1 AND @Date2 AND
           (@@DATEFIRST+DATEPART(dw, Datte))%7 IN(0,1)
)
SELECT Customer
  FROM cte
 GROUP BY Customer, WeekendNum
 HAVING COUNT(*) > 2
22 ноя 16, 16:40    [19921654]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
Akina,

Заданный период дат включает все субботы и все воскресенья

Это как бы единое целое в данной задаче

Покупатель может купить 1 раз в субботу и 1 раз в воскресенье на неделе либо 2 покупки в субботу либо две в воскресенье и так во все недели из определённого периода
22 ноя 16, 16:45    [19921682]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
Спасибо всем большущее
Помогли
22 ноя 16, 16:47    [19921698]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
juliassy
Покупатель может купить 1 раз в субботу и 1 раз в воскресенье на неделе либо 2 покупки в субботу либо две в воскресенье и так во все недели из определённого периода


Тогда получается не "больше двух покупок", а "две и более". В моём запросе поменять в HAVING с больше на больше или равно:
HAVING COUNT(*) >= 2
22 ноя 16, 16:47    [19921699]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу с датами  [new]
juliassy
Member

Откуда:
Сообщений: 7
Sybex,

Спасибо
22 ноя 16, 16:50    [19921713]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить