我在訪問資料庫中有一個表,其中包含測驗系列、樣本、結果、名稱和測量的列。對于每個測驗系列和名稱,我想選擇最后一個樣本和結果,其中測量為 TRUE,并且所有先前的結果都是 TRUE。
所以,如果我有
| FID_testseries | FID_sample | ID_結果 | 名稱 | 測量 |
|---|---|---|---|---|
| 1 | 1 | 1 | 約翰 | 真的 |
| 1 | 2 | 2 | 約翰 | 真的 |
| 1 | 3 | 3 | 約翰 | 錯誤的 |
| 1 | 4 | 4 | 約翰 | 真的 |
| 1 | 5 | 5 | 約翰 | 錯誤的 |
| 1 | 1 | 6 | 簡 | 真的 |
| 1 | 2 | 7 | 簡 | 真的 |
| 1 | 3 | 8 | 簡 | 真的 |
| 1 | 4 | 9 | 簡 | 錯誤的 |
| 1 | 5 | 10 | 簡 | 真的 |
| 1 | 1 | 11 | 杰夫 | 錯誤的 |
| 1 | 2 | 12 | 杰夫 | 真的 |
| 1 | 3 | 13 | 杰夫 | 真的 |
| 1 | 4 | 14 | 杰夫 | 錯誤的 |
| 1 | 5 | 15 | 杰夫 | 真的 |
我要選擇
| FID_testseries | FID_sample | ID_結果 | 名稱 | 測量 |
|---|---|---|---|---|
| 1 | 2 | 2 | 約翰 | 真的 |
| 1 | 3 | 8 | 簡 | 真的 |
選擇值變化讓我非常接近結果的行,但是每次測量值從真變為假時我都會得到一個結果,這不是我想要的。
編輯 22-12-2021:上述 SQL:
SELECT
qRes.FID_testseries ,
qRes.FID_sample ,
qRes.ID_result ,
qRes.name ,
qRes.measurement ,
(
SELECT
TOP 1 sqRes.measurement
FROM
qryResultater sqRes
WHERE
qRes.name = sqRes.name
AND qRes.FID_testseries = sqRes.FID_testseries
AND qRes.FID_sample < sqRes.FID_sample
ORDER BY
sqRes.FID_sample ) AS nextMeasurement
FROM
qryResultater AS qRes
WHERE
((
SELECT
TOP 1 sqRes.measurement
FROM
qryResultater sqRes
WHERE
qRes.name = sqRes.name
AND qRes.FID_testseries = sqRes.FID_testseries
AND qRes.FID_sample < sqRes.FID_sample
ORDER BY
sqRes.FID_sample)) <> qRes.measurement
AND qRes.measurement = -1;
哪個回傳
| FID_testseries | FID_sample | ID_結果 | 名稱 | 測量 |
|---|---|---|---|---|
| 1 | 2 | 2 | 約翰 | 真的 |
| 1 | 4 | 4 | 約翰 | 真的 |
| 1 | 3 | 8 | 簡 | 真的 |
| 1 | 3 | 13 | 杰夫 | 真的 |
uj5u.com熱心網友回復:
考慮:
查詢1:
SELECT Data.FID_testseries, Data.FID_sample, Data.ID_result, Data.Name, Data.Measurement,
DCount("*","Data","Measurement = False AND FID_testseries=" & [FID_testseries] & " AND [Name]='" & [Name] & "' AND ID_result <=" & [ID_result]) AS Cnt
FROM Data
WHERE (((DCount("*","Data","Measurement = False AND FID_testseries=" & [FID_testseries] & " AND [Name]='" & [Name] & "' AND ID_result <=" & [ID_result]))=0));
或者
SELECT Data.FID_testseries, Data.FID_sample, Data.ID_result, Data.Name, Data.Measurement,
(SELECT Count("*") FROM Data AS D WHERE Measurement = False AND FID_testseries=Data.[FID_testseries] AND [Name]=Data.[Name] AND ID_result <=Data.[ID_result]) AS Cnt
FROM Data
WHERE ((((SELECT Count("*") FROM Data AS D WHERE Measurement = False AND FID_testseries=Data.[FID_testseries] AND [Name]=Data.[Name] AND ID_result <=Data.[ID_result]))=0));
如果 Measurement 是文本欄位而不是 yes/no 型別,請將 False 括在引號中。
查詢2:
SELECT Query1.* FROM Query1 INNER JOIN
(SELECT Max(ID_result) AS IDR, FID_testseries, Name
FROM Query1 GROUP BY FID_testseries, Name) AS Q
ON Query1.ID_result = Q.IDR;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/406618.html
標籤:
上一篇:如何通過AccessVBA連接到啟用WebAPI的資料庫
下一篇:如何解決標簽面板樣式問題?
