我有一個基于布爾列回傳值的查詢:如果 id_crsp 包含布林值 true AND false,則它被選中。只有 true 或 false 值的 id_crsp 的值不會被選中。
根據這個結果,我想對重復的 id_crsp 進行排序,并只選擇日期最早的那個
資料庫值:
| ID | idcrsp | 日期 | 布林值 |
|---|---|---|---|
| 1個 | 100 | 11-2022 | 真的 |
| 2個 | 100 | 07-2022 | 錯誤的 |
| 3個 | 200 | 06-2022 | 錯誤的 |
| 4個 | 300 | 09-2022 | 真的 |
| 5個 | 300 | 08-2022 | 錯誤的 |
| 6個 | 400 | 10-2022 | 錯誤的 |
| 7 | 100 | 01-2022 | 錯誤的 |
| 8個 | 100 | 02-2022 | 錯誤的 |
我的實際要求:
SELECT true_table.* FROM mydb as true_table
INNER JOIN
(SELECT * FROM mydb WHERE requalif=TRUE) as false_table
ON true_table.idcrsp = false_table.idcrsp
AND true_table.requalif = FALSE;
這個回報:
| ID | idcrsp | 日期 | 布林值 |
|---|---|---|---|
| 8個 | 100 | 02-2022 | 錯誤的 |
| 7 | 100 | 01-2022 | 錯誤的 |
| 2個 | 100 | 07-2022 | 錯誤的 |
| 5個 | 300 | 08-2022 | 錯誤的 |
我想豐富我的請求,以便只有兩行:
- 編號 5
- id 7(它有重復的 id_crsp 并且有最早的日期)。
謝謝你的幫助 !
uj5u.com熱心網友回復:
使用您的原始查詢,您可以只添加 row_number 并按 idcrsp 對其進行磁區,然后按日期降序排序。然后只選擇 rn = 1 的行
select * from
(SELECT true_table.*, row_number() over (partition by id_crsp order by date desc) rn FROM mydb as true_table
INNER JOIN
(SELECT * FROM mydb WHERE requalif=TRUE) as false_table
ON true_table.idcrsp = false_table.idcrsp
AND true_table.requalif = FALSE)
where rn = 1
uj5u.com熱心網友回復:
如何從最后的回應/請求中獲取:
select * from
(SELECT true_table.*, row_number() over (partition by id_crsp order by date desc) rn FROM mydb as true_table
INNER JOIN
(SELECT * FROM mydb WHERE requalif=TRUE) as false_table
ON true_table.idcrsp = false_table.idcrsp
AND true_table.requalif = FALSE)
where rn = 1
idcrsp,最小假布林值的日期,以及最近日期的真布林值的日期??
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536560.html
標籤:数据库加入要求存在
下一篇:Mysql查詢根據列值選擇行
