| ID | 日期 | 可用 | 產品編號 | 產品_召回 |
|---|---|---|---|---|
| 200 | 2019-10-10 | 1個 | 123 | 是的 |
| 201 | 2020-07-10 | 1個 | 123 | 不 |
| 202 | 2020-08-11 | 0 | 123 | 是的 |
| 203 | 2021-07-10 | 0 | 123 | 是的 |
| 204 | 2021-01-10 | 0 | 123 | 不 |
| 205 | 2021-07-10 | 0 | 124 | 是的 |
| 206 | 2021-01-10 | 0 | 124 | 不 |
我需要一個查詢來根據按最新日期排序的 is_available 列值選擇最大行。如果產品的 is_available = 1,我應該獲得 is_available = 0 的最大行。同樣,如果產品僅將 is_available 設定為 0,我應該獲得 is_available = 0 的最大行。
如果產品 ID 同時具有 is_available = 1 和 is_available = 0,那么我需要使用 is_available = 1 獲取最新記錄,產品 ID 123 就是這種情況。對于產品 ID 124,沒有 is_available = 1 所以我需要獲取 is_available = 0 的最新記錄。
例如:場景 1:如果我指定 product_id = 123,那么預期輸出應該是
| ID | 日期 | 可用 | 產品編號 | 產品_召回 |
|---|---|---|---|---|
| 201 | 2020-07-10 | 1個 | 123 | 不 |
場景 2:如果我指定 product_id = 124,那么預期輸出應該是
| ID | 日期 | 可用 | 產品編號 | 產品_召回 |
|---|---|---|---|---|
| 205 | 2021-07-10 | 0 | 124 | 是的 |
我不確定如何撰寫可以執行此操作的單個查詢。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
WITH cte AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY is_available DESC, date DESC) rn
FROM test
)
SELECT *
FROM cte
WHERE rn = 1;
用于選擇特定產品使用的行
SELECT *
FROM test
WHERE product_id = @product_id
ORDER BY is_available DESC, date DESC
LIMIT 1;
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536561.html
標籤:数据库数据库加入外连接
