Как получить последние 5 уникальных идентификаторов продукта? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть стол заказов. Каждый заказ связан с одним или несколькими элементами корзины.

Основной код:

SELECT * FROM Orders o JOIN OrderItems oi ON o.OrderNumber = oi.OrderNumber

Я могу ограничиться последними 5 пунктами, выполнив это:

ORDER BY oi.CreatedDate DESC LIMIT 5

Однако в некоторых случаях пользователь размещал несколько заказов на одни и те же продукты. например,

OrderNo   ItemNo   ProductId
  1          1         70
  1          2         20
  2          1         80
  2          2         30
  3          1         10
  4          1         90
  5          1         10
  6          1         40
  7          1         50
  8          1        100
  9          1         10
 10          1         30
 11          1         10
 12          1         60

Если я получу последние пять предметов, я получу 60, 10, 30, 10, 100. На самом деле я хочу получить последние 5 уникальных идентификаторов продукта - так что это будет 60, 10, 30, 100, 50. Каким будет SQL для этого?

Отредактировано

Если я использую GROUP BY, я получаю 60, 100, 50, 40, 90. Где 30?

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Попробуйте:

select ProductID from
(select ProductID, max(OrderNo)
 from Orders
 group by ProductID
 order by 2 desc) sq
limit 5
1 голос
/ 06 марта 2012

Просто добавьте GROUP BY Product

SELECT * 
FROM Orders o 
JOIN OrderItems oi ON o.OrderNumber = oi.OrderNumber 
GROUP BY o.Product 
ORDER BY oi.CreatedDate DESC LIMIT 5 
1 голос
/ 06 марта 2012

ИСПОЛЬЗОВАНИЕ `

ГРУППА ПО ПРОДУКЦИИ ПО ЗАКАЗУ DESC LIMIT 5

`

0 голосов
/ 06 марта 2012

РЕДАКТИРОВАТЬ: проблема в том, что MySql делает group by до order by. Уловка, чтобы обмануть это:

SELECT * FROM
(
   SELECT
      O.OrderNumber, 
      oi.ItemNo, 
      oi.Productid
   FROM 
      orders o 
   JOIN 
      OrderItems oi ON o.OrderNumber = oi.OrderNumber
   ORDER BY 
      oi.CreateDate DESC
) AS fool_mysql
GROUP BY 
   ProductId
LIMIT 5;

То есть делайте упорядочение ДО группировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...