【问题标题】:Select unique product id and order by stock id desc选择唯一的产品 id 并按库存 id desc 订购
【发布时间】:2013-11-06 15:46:59
【问题描述】:

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

库存表:

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

我需要最新数量的产品。

【问题讨论】:

    标签: php mysql sql group-by unique


    【解决方案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
    

    【讨论】:

    • 你可以通过左连接而不是子查询获得相同的结果。在下面检查我的答案。
    【解决方案2】:

    假设您对“最新”的定义是 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。

    【讨论】:

      【解决方案3】:

      您可以通过表的左连接来完成此操作,该表仅过滤没有具有更高 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多