我有一個看起來像這樣的表:
| ID | 掙錢 | days_since_start |
|---|---|---|
| 1 | 1000 | 1 |
| 1 | 2000 | 2 |
| 1 | 3000 | 4 |
| 1 | 2000 | 5 |
| 2 | 1000 | 1 |
| 2 | 100 | 3 |
我想要那些沒有 days_since_start 的行(這意味著那天 money_earned 列是空的) - 將包括所有天 PER ID,“money”為空表示沒有收入,所以它看起來像這樣:
| ID | 掙錢 | days_since_start |
|---|---|---|
| 1 | 1000 | 1 |
| 1 | 2000 | 2 |
| 1 | 空值 | 3 |
| 1 | 3000 | 4 |
| 1 | 2000 | 5 |
| 2 | 1000 | 1 |
| 1 | 空值 | 2 |
| 2 | 100 | 3 |
我試圖尋找類似的東西,但我什至不知道這是什么功能......
謝謝你!
uj5u.com熱心網友回復:
您可以先通過查詢為您的 ids 和 days 生成表
SELECT d1.id, generate_series(1, max(d1.days_since_start)) AS days_since_start
FROM days d1 JOIN days d2 ON d1.id = d2.id GROUP BY d1.id
(如果你需要從1到100的所有數字,你可以 用數字100替換運算式max(d1.days_since_start))
然后將它與您的表連接起來。最終查詢可能如下所示
WITH genDays AS
(SELECT d1.id, generate_series(1, max(d1.days_since_start)) AS days_since_start
FROM days d1 JOIN days d2 ON d1.id = d2.id GROUP BY d1.id)
SELECT coalesce(genDays.id, d3.id) AS id,
d3.money_earned,
coalesce(d3.days_since_start, genDays.days_since_start) AS days_since_start
FROM days d3 FULL JOIN genDays ON genDays.id = d3.id
AND genDays.days_since_start = d3.days_since_start
輸出將根據您的需要
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467471.html
標籤:sql PostgreSQL
下一篇:兩個整數值之間的距離
