2013-08-27 44 views
0

我有以下SQL提取最近invoice對於一個給定bill簡化多個SQL涉及「按日期倒序限制1」

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

我運行在一組的每個bill_id,說[1, 5, 7, 9]。有沒有辦法只用一個來執行這4個SQL命令?

編輯::澄清,我有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) 
+1

你能告訴我們的模式? –

+2

我認爲你需要使用in關鍵字。 (1,5,7,9) – Jonny

+1

@Jonny中的「發票」。「bill_id」。 。 。 OP正試圖返回四行,而不是一行。 –

回答

1

您可以簡單地使用:

SELECT * 
FROM invoices 
WHERE bill_id IN (1,5,7,9) 
GROUP BY bill_id HAVING MAX(issue_date); 

測試相同的數據@Fabien帖子:SQL Fiddle

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:​​3210