1

在庫からユニークな製品を入手しようとしています...

在庫表:

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

製品の最新の数量が必要です。

4

3 に答える 3

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
于 2013-11-06T15:49:25.560 に答える
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 が大きい行がない在庫行を教えてください。

于 2013-11-06T15:55:19.900 に答える
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;
于 2013-11-06T16:07:26.847 に答える