如何获得最近5个唯一的产品ID?

时间:2012-03-06 11:52:40

标签: mysql sql database

我有一张订单表。每个订单都链接到一个或多个购物篮。

基本代码:

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

我可以通过这样做限制最后5个项目:

ORDER BY oi.CreatedDate DESC LIMIT 5

但是,在某些情况下,用户已在同一产品中下了多个订单。 e.g。

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个唯一的产品ID - 这样就是60,10, 30,100,50。这会是什么SQL?

被修改

如果我使用GROUP BY,我会得到60,100,50,40,90。哪里有30?

4 个答案:

答案 0 :(得分:1)

USE`

  

GROUP BY产品订单按订单DESC限制5

`

答案 1 :(得分:1)

只需添加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 

答案 2 :(得分:1)

尝试:

select ProductID from
(select ProductID, max(OrderNo)
 from Orders
 group by ProductID
 order by 2 desc) sq
limit 5

答案 3 :(得分:0)

编辑:问题是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;

也就是说,在分组之前进行排序。