2017-07-25 23 views
0

、GROUP BYのための最後の項目を取得する:どのように私はこのようなテーブル持って

id transaction_id auto_recurring paid_amount package_customerid 
37    0    1   0     4 
45    37    1   0     4 
51    0    1   0     4 
57    51    1   0     4 
62    0    1   0     4 
67    62    1   0     4 

がpackage_customer_idの6つのレコードがあります4.今、私はこのケースIDに4の最後のレコードを取得したいです= = 67が私の希望するレコードです。私はこれを試しますSELECT * FROM transactions GROUP BY package_customer_id。しかし、私はpackage_customer_id = 4の最初のレコードを取得しました。つまり、id = 4は私の取得結果です。どのように私はid = 67(私の希望のレコード)このSQLを変更することができますか?

+0

「グループ化」を使用する場合、必ずしもレコードを戻すわけではありません。選択基準に一致するフィールドの集合が得られます。選択項目( "*"がある)のフィールドは、where句で表現するか、MAXのような集約関数を使用する必要があります。https://dev.mysql.com/doc/refman/5.7/en/group-by -functions.htmlこれを実行しようとすると、MySQLの新しいバージョンでエラーが発生します。 – Jaydee

答えて

0

group byを使用しないでください。 whereを使用します。

SELECT t.* 
FROM transactions t 
WHERE t.id = (SELECT MAX(t2.id) 
       FROM transactions t2 
       WHERE t2.package_customer_id = t.package_customer_id 
      ); 

あなたは外側のクエリで、あなたが好きな方、パッケージ顧客IDのためにこれをフィルタリングすることができます。

+0

package_CustomerID = 4を処理しません – xQbert

0

お試しください。これで私のショットになり

SELECT * FROM transactions WHERE id IN (SELECT MAX(id) FROM transactions GROUP BY package_customerid) 
+0

package_CustomerID = 4を処理しません – xQbert

+0

@xQbert OH !!私はこの点を省略したが、とにかくサブクエリ内の条件を追加することができる –

-1

。申し訳ありませんが、私はそれをテストしていませんが、私はあなたにそれを任せる:)

EDIT:

いけない列名の:)

の引用符は、「`」package_customer_idあなたに列名を確認してください忘れますOR package_customerid

+0

package_CustomerID = 4を処理しない – xQbert

2

SELECT * FROM transactions WHERE package_customer_id = 4 ORDER BY id DESC LIMIT 1;

:あなたはこのように使用することができます

SELECT temp.* FROM (SELECT * FROM `transactions` WHERE package_customer_id = 4 order by id DESC LIMIT 1) AS temp GROUP BY temp.package_customer_id 
+1

フィールドが "予約語"の場合にのみバッククォートが必要 – xQbert

+0

アポストロフィは、 "列名"のようにそのまま残してください – Strawberry

+0

@Strawberry何が収縮しますか?私は一般的にそれらを使用しませんが、...:P注:キーワードはバッククイックを必要としません – xQbert

-1

GROUP BY句に必要がある場合は、このクエリ

を試してください:あなたは、GROUP BY句を必要としない場合

SELECT * FROM transactions where GROUP BY package_customerid ORDER BY package_customerid DESC LIMIT 1; 

OR このクエリを使用します。

SELECT MAX(id),transaction_id,auto_recurring,paid_amount,package_customerid FROM transactions where package_customerid=4; 
このクエリを使用します

出力:

id transaction_id auto_recurring paid_amount package_customerid 
67    62    1   0     4 
+0

質問では、それを使用してグループ句を使用すると述べました –

+0

フィールド値は異なっていました。ここでtransaction_IDはどのように選択されますか?なぜそれは62ですか? 0 51または37ではない? – xQbert

関連する問題