Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » GROUP BY и ORDER BY

GROUP BY и ORDER BY


     29.09.2012    Все вопросы » MySQL    3764

вопрос


К примеру есть таблица:
O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen
Как вывести для каждого клиента дату последнего заказа с указанием стоимость этого заказа?
Есть такой запрос:
SELECT Customer, OrderDate, OrderPrice FROM Orders GROUP BY Customer ORDER BY OrderDate DESC
Но этот sql запрос не подходит, т.к. выполняется сначала GROUP BY, а потом ORDER BY. PS. Таблица и пример запроса взяты с другого сайта. У меня аналогичная ситуация, только таблица другая..

Ответа пока нет


4 комментария

ПафНутиЙ
Админ

ПафНутиЙ - 30 сентября 2012 21:43 -

Мда, два раза сначала прочитал, чтоб вникнуть)))
А если
SELECT Customer, OrderDate, OrderPrice FROM Orders where Customer = '{$customer_name}' ORDER BY OrderDate DESC

где $customer_name получаем из реквеста.
P.S. при вставке таблицы просто добавляй класс table или table table-stipped или table table-bordered для нормального оформления таблиц)) ну и лишние, устаревшие теги не нужны.

Каков вопрос - таков и ответ. Просто помните об этом.

Sander
PHP-developer

Sander - 30 сентября 2012 22:38 -

Два раза прочитал, и все равно не вник :)
Вот нужный результат запроса, который мне нужно получить:
2008/11/12    1000    Hansen
2008/10/23    1600    Nilsen
2008/08/30    2000    Jensen

Твой же запрос вернет строки одного кустомера.

PS. В любом случае вопрос все еще открытый, хотя я лично в своем случае решил дело небольшим хаком.
Мой вариант не решает описанной в вопросе проблемы, но зато выполняет нужную мне функцию... Поэтому для меня вопрос уже не столь актуален.

PPS. Скоро увидите новый модуль, как раз в нем я наткнулся на эту проблему...

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

ПафНутиЙ
Админ

ПафНутиЙ - 30 сентября 2012 22:50 -

Теперь дошло )
просто ты изначально спросил
Как вывести для каждого клиента дату последнего заказа с указанием стоимость этого заказа?
вот я и подумал 1 элемент только нужен.

Каков вопрос - таков и ответ. Просто помните об этом.

nowheremany
Эксперт

nowheremany - 1 октября 2012 10:25 -

        select
            Customer, OrderDate, OrderPrice
        from
            Orders Orders1
        where
            Orders1.OrderDate=(SELECT MAX(Orders2.OrderDate) FROM Orders Orders2 WHERE
                Orders1.Customer=Orders2.Customer,
                Orders1.OrderDate=Orders2.OrderDate,
                Orders1.OrderPrice=Orders2.OrderPrice
                and Orders2.OrderDate<= '.$where_date.'
                )

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

$where_date - текущее вермя, с индексами работает на ура. Если кто предложит лучше - прошу написать мне

Благодарность принимаю тут Связь

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх