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

Откуда:
Сообщений: 9
Коллеги, здравствуйте.
Имеется таблица:
create table dbo.total_sales(
Saler_name varchar(64) not null
, sale_date datetime not null
, count int not null
)

Нужно написать селект, который вернёт следующие данные:
для каждого продавца вывести минимальную дату, когда количество продаж было максимально, и максимальную дату, когда количество продаж было минимально, а также количество продаж.
У меня получилось написать запрос, который вернёт одно из условий, но как объединить все условия в одном запросе у меня не получается. Подскажите, пожалуйста, как правильно выполнить эту задачу?
Результат должен быть таким:

Saler_name | min_date | max_count | max_date | min_count
----------------------------------------------------------------------------------
Ivanov | 20100427 | 56 | 20141103 | 2
----------------------------------------------------------------------------------
Petrov | 20090604 | 99 | 20131022 | 5
3 сен 14, 18:27    [16531315]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Тестовые задания надо решать самостоятельно.
3 сен 14, 18:29    [16531328]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
_human
Member

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

советую припудрить Свой результат и отправить с пояснениями. это будет лучше написанного кем-то непонятного кода.
3 сен 14, 18:46    [16531406]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
mssa
Member

Откуда:
Сообщений: 9
_human, вот мой запрос, он выведет минимальную дату, когда количество продаж было максимально для каждого продавца. По идее, можно аналогичный запрос написать и для второй части, но как их объединить в один?

with CTE as (
select
MIN(z.sale_date) as mindate, MAX(z.event_count) as maxcount
from table1 z
group by z.Saler_name
)

select
z.Saler_name, x.sale_date, z.event_count
from table1 z, table1 x, CTE
where x.sale_date = CTE.mindate
and z.event_count= CTE.maxcount
3 сен 14, 19:16    [16531548]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
_human
Member

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

mssa,

1) Перечитайте условие пока на 100% не поймете, что от Вас хотят.
2) Я насчитал 4 поля в конечном решении.
3) раз Вы решили написать скрипт для SQL Server, рекомендую переписать при помощи JOINs (не холивара ради)
зы. слово 'INNER' можно упустить

Касательно кода.. Что Вам мешает дописать(через ",") еще одно CTE с "MAX(z.sale_date) , MIN(z.event_count)" и сделать еще 500 соединений ?

з.ы. отличный ресурс - sql-ex.ru (не реклама)
3 сен 14, 20:07    [16531741]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104751
mssa
_human, вот мой запрос, он выведет минимальную дату, когда количество продаж было максимально для каждого продавца.

Нет. Запрос
select
MIN(z.sale_date) as mindate, MAX(z.event_count) as maxcount
from table1 z
group by z.Saler_name
выберет просто минимальную дату и максимальное число продаж.
Без всякой связи этих значений между собой
4 сен 14, 09:28    [16533080]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить