我的資料庫中目前有 2 個表,我需要從中合并資訊。其中之一是日志表,記錄系統中所有產品的狀態變化。結構示例:
| 改變日期 | 產品 | 最后狀態 | 新狀態 |
|---|---|---|---|
| 2021-10-01 | 一個 | 新的 | 老化 |
| 2021-11-02 | 一個 | 老化 | 補給 |
| 2021-11-25 | 一個 | 補給 | 離開 |
| 2021-08-03 | 乙 | 新的 | 老化 |
| 2021-09-04 | 乙 | 新的 | 老化 |
| 2021-10-13 | 乙 | 補給 | 離開 |
另一個是包含每種產品的每次銷售的事實表。結構示例:
| 日期 | 產品 | 已付價格 |
|---|---|---|
| 2021-10-02 | 一個 | 124 |
| 2021-11-05 | 一個 | 115 |
| 2021-08-25 | 乙 | 223 |
| 2021-09-03 | 乙 | 218 |
我想寫一份宣告,告訴我產品在銷售時的狀態。期望的結果:
| 日期 | 產品 | 已付價格 | 狀態時間 |
|---|---|---|---|
| 2021-10-02 | 一個 | 124 | 老化 |
| 2021-11-05 | 一個 | 115 | 補給 |
| 2021-08-25 | 乙 | 223 | 老化 |
| 2021-09-03 | 乙 | 218 | 老化 |
我已經敲了大約一個星期的頭,似乎無法找到答案。我猜最大的挑戰是性能,因為事實表有大約 2M 行,而且日志表也很大。
提前謝謝你們:)
uj5u.com熱心網友回復:
例如
select top(1) with ties s.*, l.NewStatus
from sales s
join statusLog l on s.Product = l.Product and s.Date >= l.ChangeDate
order by row_number() over(partition by s.Product, s.Date order by l.ChangeDate desc);
隨著樣本資料回傳
Date Product PricePaid NewStatus
2021-10-02 A 124 Aging
2021-11-05 A 115 Ressuply
2021-08-25 B 223 Aging
2021-09-03 B 218 Aging
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404964.html
標籤:
上一篇:T-SQL::TRUNCATE或DELETE架構中的所有表
下一篇:在where命令中無法識別派生表
