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

Откуда:
Сообщений: 7
1. Выбрать 3 пункта, в которых было принято больше всего заказов в октябре 18 года
2. Выбрать клиентов, которые в 18 году ничего не отправляли( не было заказов)

1. Как выбрать именно 3 пункта? как их сравнить между собой? Я могу только посчитать количество заказов в данный месяц у конкретного пункта таким запросом

select COUNT(*) FROM dbo.condition WHERE (datepart(year,datecondition)=2018 AND       
datepart(month,datecondition)=10) AND codpribytiya = 1 and codpunkta = 1


2. Я выбираю клиентов которые делали заказы в любой год помимо 18, но это не исключает того, что они могли сделать несколько заказов, допустим, в 17 и в 18, и у меня он выведет данного клиента, хотя он делал заказ в 18 году.
SELECT * FROM clients WHERE codclient IN 
( SELECT codclient FROM dbo.offer WHERE offernumber NOT IN 
(SELECT offernumber FROM dbo.condition WHERE  (datepart(year,datecondition)=2018 )))
7 ноя 18, 20:25    [21727359]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
PizzaPizza
Member

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

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

И не насилуйте сервер такими вещами
datepart(year,datecondition)=2018

сделайте datecondition >= начало года в формате вашего datecondition.
7 ноя 18, 21:32    [21727423]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
londinium
Member

Откуда: Киев
Сообщений: 1168
qwerartem,
автор
Как выбрать именно 3 пункта? как их сравнить между собой? Я могу только посчитать количество заказов в данный месяц у конкретного пункта таким запросом

select COUNT(*) FROM dbo.condition WHERE (datepart(year,datecondition)=2018 AND
datepart(month,datecondition)=10) AND codpribytiya = 1 and codpunkta = 1


попробуйте как-то так
WITH CTE AS
(
  SELECT C.CODPUNKTA,COUNT(*)CNTT FROM dbo.condition C
   WHERE CAST(C.datecondition AS DATE)>='20181001' 
     AND CAST(C.datecondition AS DATE)<'20181101'
   GROUP BY C.CODPUNKTA
)
SELECT TOP 3 CT.CODPUNKTA,CT.CNTT
 FROM CTE AS CT
  ORDER BY C.CNTT DESC
7 ноя 18, 22:24    [21727470]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
Cristiano_Rivaldo
Member

Откуда:
Сообщений: 327
1.
SELECT TOP 3 C.CODPUNKTA,COUNT(*)CNTT FROM dbo.condition C
   WHERE CAST(C.datecondition AS DATE)>='20181001' 
     AND CAST(C.datecondition AS DATE)<'20181101'
   GROUP BY C.CODPUNKTA
 ORDER BY 2 DESC

2.
SELECT * 
FROM clients CL
WHERE NOT EXISTS
 (
SELECT NULL
FROM dbo.offer ff INNER JOIN dbo.condition cn ON FF.offernumber = CN.offernumber
WHERE FF.codclient  = CL.codclient 
 AND datepart(year,CN.datecondition)=2018
)
8 ноя 18, 09:18    [21727702]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
qwerartem
Member

Откуда:
Сообщений: 7
Cristiano_Rivaldo, большое спасибо! помогли очень сильно. Можете дать какой-нибудь свой контакт, хотелось бы вознаграждать вас, если бы вы могли дальше подсказывать с запросами?
10 ноя 18, 15:44    [21730467]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Модератор: Ответы за вознаграждение вот тут: https://www.sql.ru/forum/job
10 ноя 18, 18:10    [21730528]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросами.  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Гавриленко Сергей Алексеевич
Модератор: Ответы за вознаграждение вот тут: https://www.sql.ru/forum/job


Модератор: Lepsik, прекращайте шутковать.


Сообщение было отредактировано: 12 ноя 18, 17:51
12 ноя 18, 17:39    [21732119]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить