嗨,我正在嘗試選擇表格中的最小值而不是最大值。我想選擇第四個事件的日期,而不是最大日期。有什么建議嗎?
| 用戶 | 事件 | 日期 |
|---|---|---|
| xyz | 1 | 2021-06-06 |
| xyz | 2 | 2021-06-26 |
| xyz | 3 | 2021-07-30 |
| xyz | 4 | 2022-01-10 |
| xyz | 5 | 2022-02-14 |
| xyz | 6 | 2022-02-21 |
我正在嘗試這樣的事情:
select user, min(date), max(date) from table
where event <= 4
group by user
謝謝
uj5u.com熱心網友回復:
當前解決方案的一種替代方法是使用聚合:
SELECT
"user",
MIN(date) AS min_date,
MIN(date) FILTER (WHERE event = 4) AS fourth_date
FROM yourTable
GROUP BY "user";
對于更通用的解決方案,我們可以RANK()與資料透視查詢一起使用:
WITH cte AS (
SELECT *, RANK() OVER (PARTITION BY "user" ORDER BY date) rnk
FROM yourTable
)
SELECT
"user",
MAX(date) FILTER (WHERE rnk = 1) AS min_date,
MAX(date) FILTER (WHERE rnk = 4) AS fourth_date
FROM cte
GROUP BY "user";
根據您想要的關系行為,使用DENSE_RANK()orROW_NUMBER()代替RANK()可能有意義。
uj5u.com熱心網友回復:
您可以對不受 WHERE 影響的部分使用子查詢。
SELECT user, date, (SELECT MIN(date) FROM one)
FROM one
WHERE event=4;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519441.html
