MySQL вопрос по запросу

rbbumfirst
На сайте с 03.04.2009
Offline
87
376

Доброго дня.

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

например

group_id    item_id        price

1234 1 10
1234 2 10
1234 3 11
1234 4 12
1234 5 13

так вот на выходе я должен иметь

group_id    minPrice           nextMinPrice

1234 10 10

вложенные запросы увы нельзя. на сегодня вычисляется minPrice = 10 nextMinPrice = 11, что не совсем верно (ну так сказал заказчик). использовать временные таблицы разрешено. что в принципе и происходит на сегодня для вычисления минимальной цены, потом же происходит вычисление следующей за ней.

любой совет может быть важен для меня. спасибо.

Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
VHS-1980
На сайте с 21.05.2010
Offline
91
#1

ORDER BY price И LIMIT 0, 2 не помогут?

Или в запросе сразу несколько групп вычисляются?

если по этой логике - то вот похожее обсуждение:

http://habrahabr.ru/qa/437/

D
На сайте с 07.01.2013
Offline
90
#2

1 Считаем минимум.

2 считаем минимальную разность между минимум и ценой, не равную нулю

3. Ищем записи где цена равна минимум плюс минимальная разность

Приложение, нужное любому веб-мастеру (https://apps.apple.com/ru/app/%D0%BC%D0%BE%D0%B8-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D1%8B/id1493164681)
rbbumfirst
На сайте с 03.04.2009
Offline
87
#3

Да. к сожалению в запросе групп несколько. Limit увы не подойдет

IL
На сайте с 20.04.2007
Offline
435
#4
Dtachkov:
2 считаем минимальную разность между минимум и ценой, не равную нулю
3. Ищем записи где цена равна минимум плюс минимальная разность

Зачем?

VHS-1980:
ORDER BY price И LIMIT 0, 2 не помогут?

да, в идеале несколько UNION-ов.. или хранимка - думаю, будет быстрее, чем:

rbbumfirst:
использовать временные таблицы разрешено. что в принципе и происходит на сегодня для вычисления минимальной цены

Если отсортировать по price (подзапрос) и выбрать cid,id, min(price) GROUP BY cid (в id ,будет ID-шник соответствующий min price в каждой группе) а при следующем поиске (вторая цена) - тот же запрос (можно без id - он, если я понял правильно, не нужен)

cid,min(price) GROUP BY cid

но WHERE id NOT IN ({выбранные ID-шники списком или SELECT id из временной таблицы})

---------- Post added 02-03-2013 at 11:39 ----------

UPD с именами полей.. cid = group_id, id=item_id, price=price

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий