我目前有兩個這樣的表:
| ID | 日期 |
|---|---|
| 1 | 01-01-2022 |
| 2 | 01-02-2022 |
| 3 | 01-10-2022 |
| 4 | 01-03-2022 |
| ID | 日期 | 行動 |
|---|---|---|
| 1 | 01-05-2022 | 向前 |
| 1 | 2021 年 12 月 20 日 | 停止 |
| 1 | 2021 年 10 月 15 日 | 停止 |
| 1 | 01-20-2022 | 向前 |
| 2 | 2021 年 12 月 30 日 | 停止 |
| 2 | 2021 年 12 月 14 日 | 向前 |
| 2 | 2021 年 12 月 16 日 | 向前 |
| 2 | 2021 年 12 月 1 日 | 撤銷 |
| 2 | 01-15-2022 | 向前 |
| 3 | 01-01-2022 | 撤銷 |
| 3 | 01-02-2022 | 撤銷 |
| 3 | 01-03-2022 | 停止 |
| 4 | 2021 年 10 月 15 日 | 撤銷 |
| 4 | 03-04-2021 | 向前 |
| 4 | 01-10-2021 | 撤銷 |
我希望回傳一個包含每個 ID 的表以及在第一個表中的相應日期之前發生的操作的計數。例如,ID 1 將回傳計數 2,因為它的 2 個操作發生在 2022 年 1 月 1 日之前。
我希望決賽桌看起來像:
| ID | 計數動作 |
|---|---|
| 1 | 2 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
任何提示將非常感謝!
uj5u.com熱心網友回復:
左連接和聚合計數函式應該可以。請注意,我們加入的日期是 <= date from。左連接保留 A 中的所有 Id,因此當 B 表中沒有日期早于 A 中相關 ID 的日期時,我們將在此類記錄上獲得 0 計數。
SELECT A.ID, coalesce(count(B.*),0) Count_action
FROM A --A is your first table with 1 date per ID.
LEFT JOIN B
on A.ID= B.ID
and B.Date <=A.Date
GROUP BY A.ID
uj5u.com熱心網友回復:
左連接將做到這一點:
select p.id, count(a.id) as Count_action
from parentTable p
left join actionTable a on a.id = p.id
and a.date < p.date
group by p.id
因為count()忽略空值,count(a.id)所以用于為在其日期之前沒有任何操作的 id 獲取計數 0,而不是通常count(*)在這種情況下將計數設為 1。
重要的a.date < p.date是,條件在join中。如果它在where 中,左連接將有效地更改為內連接,并且沒有匹配操作的 id 將根本不會出現在結果中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422047.html
標籤:
