我遇到了一個我不知道如何解決的問題。我正在使用 MS Access 資料庫。
我有這個資料:

我想寫一個 SELECT 陳述句,它給出以下結果:

對于專案和發票的每個組合,我想回傳包含最大日期的記錄,條件是專案和發票組合的所有記錄都已簽名(即已簽名或日期列不為空)。
在我的腦海中,首先我會整理出不相關的記錄,然后回傳剩余記錄的最大日期。我被困在第一部分。
誰能指出我正確的方向?
謝謝,葫蘆
uj5u.com熱心網友回復:
從一個初始查詢開始,該查詢從您希望最終查詢回傳的行中獲取Project,Invoice的組合。Date
SELECT
y0.Project,
y0.Invoice,
Max(y0.Date) AS MaxOfDate
FROM YourTable AS y0
GROUP BY y0.Project, y0.Invoice
HAVING Sum(IIf(y0.Signed Is Null,1,0))=0;
該HAVING子句丟棄任何Project/Invoice組,其中包括列中包含 Null 的Signed行。
如果將該查詢另存為qryTargetRows,則可以將其連接回原始表以選擇匹配的行。
SELECT
y1.Project,
y1.Invoice,
y1.Desc,
y1.Value,
y1.Signed,
y1.Date
FROM
YourTable AS y1
INNER JOIN qryTargetRows AS sub
ON (y1.Project = sub.Project)
AND (y1.Invoice = sub.Invoice)
AND (y1.Date = sub.MaxOfDate);
或者,您可以通過直接將其 SQL 包含為子查詢來執行此操作而無需保存的查詢。
SELECT
y1.Project,
y1.Invoice,
y1.Desc,
y1.Value,
y1.Signed,
y1.Date
FROM
YourTable AS y1
INNER JOIN
(
SELECT y0.Project, y0.Invoice, Max(y0.Date) AS MaxOfDate
FROM YourTable AS y0
GROUP BY y0.Project, y0.Invoice
HAVING Sum(IIf(y0.Signed Is Null,1,0))=0
) AS sub
ON (y1.Project = sub.Project)
AND (y1.Invoice = sub.Invoice)
AND (y1.Date = sub.MaxOfDate);
uj5u.com熱心網友回復:
撰寫一個 SQL 查詢,這在 MS-Access 中也應該是可能的,如下所示:
SELECT
Project,
Invoice,
MIN([Desc]) Descriptions,
SUM(Value) Value,
MIN(Signed) Signed,
MAX([Date]) "Date"
FROM data
WHERE Signed<>'' AND [Date]<>''
GROUP BY
Project,
Invoice
輸出:
| 專案 | 發票 | 說明 | 價值 | 簽 | 日期 |
|---|---|---|---|---|---|
| 一個 | 1 | 球 | 100 | 京東 | 2022-09-20 |
| 乙 | 1 | 沙發 | 300 | 京東 | 2022-09-22 |
| 乙 | 2 | 桌子 | 100 | 京東 | 2022-09-23 |
注意:對于專案 A 的發票 1,您將看到 300 的值,這是該發票的總和(分組時Project='A' and Invoice=1)。
也許我應該使用 DCONCAT(請參閱:Access Query 中記錄之間的連接)作為描述,在其中包含“TV”。但我無法測驗,所以我只指這個答案。
uj5u.com熱心網友回復:
嘗試加入第二個查詢:
Select *
From YourTable As T
Inner Join
(Select Project, Invoice, Max([Date]) As MaxDate
From YourTable
Group By Project, Invoice) As S
On T.Project = S.Project And T.Invoice = S.Invoice And T.Date = S.MaxDate
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512501.html
標籤:sql毫秒访问
