0

1.購入表

Id   user     pur_type
----------------------
1    408       5-12
2    408       5-12
3    222       1-11
4    222       5-12
5    408       1-11
6    408       1-11

2.商品表

Id   parts    days
-----------------
1    1-11      50
2    5-12      40

私はそのようなクエリを実装しました

SELECT p1.id, p1.user, p1.pur_type, g.parts, g.days
FROM purchase p1
INNER JOIN goods g ON p1.pur_type = g.parts
LEFT JOIN goods p2 ON ( p1.pur_type= p2.pur_type
AND p1.id < p2.id )
WHERE p2.id IS NULL

結果は、各pur_typeの最後のレコードのみです

Id   user   pur_type  parts   days
---------------------------------
4    222     5-12     5-12    40
6    408     1-11     1-11    50

1人の特定のユーザーpurchaseのそれぞれのテーブルから最後のレコードを取得するにはどうすればよいですか?pur_type

たとえば、ユーザー408の場合は次の結果が必要です。

Id   user     parts   days
-------------------------
2    408       5-12    40
6    408       1-11    50

結果の説明:ユーザー408の5-12の
最後のレコードは=2ですユーザー408の1-11の 最後のレコードは=6ですpartid
partid

4

2 に答える 2

0

既存のクエリへの簡単な変更:

SELECT p1.id, p1.user, p1.pur_type, g.parts, g.days
FROM purchase p1
INNER JOIN goods g ON p1.pur_type = g.parts
LEFT JOIN purchase p2 
       ON ( p1.pur_type= p2.pur_type AND p1.id < p2.id AND p1.user=p2.user)
WHERE p2.id IS NULL and p1.user = 408
于 2013-02-08T12:52:29.557 に答える
0
SELECT  a.*, c.* -- select columns youw ant
FROM    Purchase a
        INNER JOIN
        (
            SELECT user, MAX(ID) max_ID
            FROM    Purchase
            GROUP   BY user, pur_type
        ) b ON  a.user = b.user AND
                a.ID = b.max_ID
        INNER JOIN goods c
            ON a.pur_type = c.parts
WHERE   a.USER = 408

パフォーマンスを向上させるには、partsテーブルgoodsの列にもINDEXを追加します。pur_type

于 2013-02-08T12:39:56.797 に答える