0

invoice特定の最新のものを抽出する次のSQLがありますbill

SELECT  "invoices".* FROM "invoices"  WHERE "invoices"."bill_id" = ?  ORDER BY issue_date DESC LIMIT 1

bill_idセット内のそれぞれに対して実行します[1, 5, 7, 9]。これら 4 つの SQL コマンドを 1 つだけで実行する方法はありますか?

編集::明確にするために、4 つの請求書があり、各請求書には複数の請求書があります。各請求書の最新の請求書が必要です。したがって、請求書は合計 4 通です。

スキーマ:

CREATE TABLE "bills" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255))
CREATE TABLE "invoices" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "issue_date" datetime, "amount_cents" integer, "bill_id" integer)
4

2 に答える 2

1

このクエリを試すことができます:

 SELECT  i.* 
 FROM invoices AS i
 WHERE i.bill_id in (1,5,7,9)
 AND i.issue_date = (SELECT li.issue_date 
                     FROM invoices AS li
                     WHERE i.bill_id = li.bill_id
                     ORDER BY li.issue_date DESC LIMIT 1)

SQLFIDDLE を参照してください: http://sqlfiddle.com/#!5/f4f27/3/0

MAXまたは、関数とGROUP BY句でそれを行うことができます

SELECT  i.* 
FROM invoices AS i
WHERE i.bill_id in (1,5,7,9)
AND i.issue_date = (SELECT MAX(li.issue_date)
                    FROM invoices AS li
                    WHERE i.bill_id = li.bill_id
                    GROUP BY li.bill_id)

SQLFIDDLE を参照してください: http://sqlfiddle.com/#!5/f4f27/4/0

于 2013-08-27T16:20:57.477 に答える