通过库存ID desc选择唯一的产品ID和订单

时间:2013-11-06 15:47:00

标签: php mysql sql group-by unique

我正试图从库存中获取独特的产品......

股票表:

id - product - quantity
1    2            0
2    3            5
3    2            19
4    4            3
5    2            8

结果

id - product - quantity
5    2            8
4    4            3
2    3            5

正在使用

SELECT max(id) as id, 
product
FROM stock 
GROUP by product 
ORDER by id DESC

但我无法获得最新数量的产品 我得到了这个查询:

id - product - quantity
1    2            0
2    3            5
4    4            3

我需要最新数量的产品。

3 个答案:

答案 0 :(得分:1)

您可以将现有查询包装在子查询中,并将其连接到表本身,以便获取同一行的其他列。

SELECT  a.*
FROM    stock a
        INNER JOIN
        (
            SELECT  product, MAX(ID) id
            FROM    stock
            GROUP   BY product
        ) b ON  a.product = b.product
                AND a.ID = b.ID
ORDER   BY a.id DESC

答案 1 :(得分:0)

假设您对“最新”的定义是max(id),我认为最简单的方法是:

SELECT s.id, s.product, s.quantity
FROM stock s
WHERE NOT EXISTS (SELECT 1 FROM stock s2 WHERE s2.product = s.product and s2.id > s.id);

基本上给我一个库存行,其中对于具有更大ID的相同产品没有行。

答案 2 :(得分:0)

你可以使用表格的左连接来实现它,它只过滤没有一个具有更高id和相同产品的行,避免使用子查询和分组,这在大型表上可能非常昂贵:

select p1.id, p1.product, p1.quantity from stock as p1 
left join test as p2 on p1.product = p2.product and p2.id> p1.id
where p2.id is null
order by p1.id desc;