Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 415 |
qwerartem, Нужно сначала получить количество заказов в по каждому пункту, например с помощью группировки, потом отсортировать количества по убыванию и выбрать топ 3. И не насилуйте сервер такими вещами datepart(year,datecondition)=2018 сделайте datecondition >= начало года в формате вашего datecondition. |
7 ноя 18, 21:32 [21727423] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1193 |
qwerartem,
попробуйте как-то так 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] Ответить | Цитировать Сообщить модератору |
Cristiano_Rivaldo Member Откуда: Сообщений: 346 |
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] Ответить | Цитировать Сообщить модератору |
qwerartem Member Откуда: Сообщений: 7 |
Cristiano_Rivaldo, большое спасибо! помогли очень сильно. Можете дать какой-нибудь свой контакт, хотелось бы вознаграждать вас, если бы вы могли дальше подсказывать с запросами? |
10 ноя 18, 15:44 [21730467] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37146 |
|
|
10 ноя 18, 18:10 [21730528] Ответить | Цитировать Сообщить модератору |
Lepsik Member Откуда: glubinka Сообщений: 4256 |
Сообщение было отредактировано: 12 ноя 18, 17:51 |
|||
12 ноя 18, 17:39 [21732119] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |