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

Откуда:
Сообщений: 36
Добрый день!

Возникла задача найти всех клиентов у которых в последнем заказе(с максимальной датой) есть товары из выбранной категории (Item.Business=1). В моем запросе отображает только одного чувака с максимальной датой на данный момент. Как можно перестроить запрос, чтобы выполнить поставленную задачу?

SELECT *
FROM ClientOrder
Join Item on ClientOrder.ItemID=Item.ID
Where ClientOrder.Date=
(
Select Max(ClientOrder.Date)
From ClientOrder Where Item.Business=1
)
8 дек 13, 23:25    [15261868]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
sdet
Member

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

приблизительно так (* лучше заменить на необходимые поля)
Select * from
(SELECT *,rank() over (partition by ClientOrder.CientId order by ClientOrder.Date DESC) rnk
FROM ClientOrder
Join Item on ClientOrder.ItemID=Item.ID
Where Item.Business=1) t
where rnk=1
9 дек 13, 00:02    [15261973]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
aleks2
Guest
SELECT *
    FROM ClientOrder co
            Join Item on ClientOrder.ItemID=Item.ID
    Where ClientOrder.Date=( Select Max(ClientOrder.Date) From ClientOrder co1 Where co1.ClientID = co.ClientID ) 
             and Item.Business=1
9 дек 13, 06:23    [15262303]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
aleks2
SELECT *
    FROM ClientOrder co
            Join Item on ClientOrder.ItemID=Item.ID
    Where ClientOrder.Date=( Select Max(ClientOrder.Date) From ClientOrder co1 Where co1.ClientID = co.ClientID ) 
             and Item.Business=1

неправильно. Max(ClientOrder.Date) может выдать значение, которое вообще не встречается при Item.Business=1
9 дек 13, 08:11    [15262405]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Зайцев Фёдор
aleks2
SELECT *
    FROM ClientOrder co
            Join Item on ClientOrder.ItemID=Item.ID
    Where ClientOrder.Date=( Select Max(ClientOrder.Date) From ClientOrder co1 Where co1.ClientID = co.ClientID ) 
             and Item.Business=1


неправильно. Max(ClientOrder.Date) может выдать значение, которое вообще не встречается при Item.Business=1
Наверное поэтому там дальше стоит условие
and Item.Business=1

Задача ведь:
автор
найти всех клиентов у которых в последнем заказе(с максимальной датой) есть товары из выбранной категории
9 дек 13, 08:24    [15262416]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ruuu,

хотя в последнюю дату, конечно, может быть очень много заказов, но это вопрос к постановщику задачи.
9 дек 13, 08:26    [15262421]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Ruuu
Задача ведь:
автор
найти всех клиентов у которых в последнем заказе(с максимальной датой) есть товары из выбранной категории

Согласен, туплю. Но запрос всё равно неправильный, т.к. у разных клиентов запросто могут быть разные даты последнего заказа )
9 дек 13, 08:55    [15262458]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Exproment
Member

Откуда:
Сообщений: 416
halfpintboy
FROM ClientOrder
Join Item on ClientOrder.ItemID=Item.ID

эммм... ссылка на Item назодится в строке заказа ? Т.е. в заказе может быть только один Item ? Один заказ = один товар ? А как-же:
halfpintboy
есть товарры из выбранной категории
9 дек 13, 10:30    [15262856]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Добрый Э - Эх
Guest
Зайцев Фёдор
Согласен, туплю. Но запрос всё равно неправильный, т.к. у разных клиентов запросто могут быть разные даты последнего заказа )
И продолжаешь тупить дальше. Там в коррелированном подзапросе связь с основным - по ClientID. А посему для каждого клиента будет возвращаться именно ЕГО последняя дата покупки
9 дек 13, 10:33    [15262877]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по максимальной дате  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Добрый Э - Эх
И продолжаешь тупить дальше. Там в коррелированном подзапросе связь с основным - по ClientID. А посему для каждого клиента будет возвращаться именно ЕГО последняя дата покупки

Во меня клинит-то (( Поленился отформатировать в привычном стиле и уже не могу прочитать простой запрос ((
9 дек 13, 10:54    [15262988]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить