我有一個用戶串列和一個與每個用戶對應的評論日期串列,用戶可以有多個與他們相關的評論。我需要做的是創建一個額外的列,向我顯示用戶之前的評論日期,如果他們沒有之前的評論,我需要它為空。我需要的結果示例如下所示,粗體列是我要添加的列:
| 用戶 | 審查日期 | 上一次審查日期
| ----- | -------------- | ------------------------------------
| 1122334 | 2022 年 1 月 1 日 | 2021 年 6 月 6 日
| 1122334 | 2021 年 6 月 6 日 | 2021 年 6 月 1 日
| 1122334 | 2021 年 6 月 1 日 | 空
| 2244668 | 2021 年 1 月 10 日 | 2021 年 1 月 4 日
| 2244668 | 2021 年 1 月 4 日 | 空
| 3344556 | 2021 年 10 月 11 日 | 2021 年 10 月 3 日
| 3344556 | 2021 年 10 月 3 日 | 空值
您可以在示例中看到,第 1 行用戶的先前審查日期將與第 2 行用戶的審查日期相同
我嘗試使用以下內容:
select user, lead(review_date) over order(order by user,review_date desc) as Previous_review_date
這段代碼一直有效,直到我需要它為空值,在這種情況下,它將簡單地添加來自不相關用戶的上一個審查日期。
任何幫助將不勝感激。
uj5u.com熱心網友回復:
您需要對資料進行磁區以識別潛在客戶值
select user, lead(review_date) over order(partition by user order by review_date desc) as Previous_review_date
uj5u.com熱心網友回復:
很確定OUTER APPLY在這里也可以使用限制。
請注意,如果您需要的不僅僅是單列資料,這可能會很有用。
一些檔案 - 外部應用
問湯姆 - LINQ,交叉/外部應用
本質上,外部應用將為表 A 中的每一行運行一次子查詢,將兩者之間的結果關聯起來。由于我們對結果進行了限制和排序;我們只會取回 1 條審查日期小于審查日期的記錄。現在作為外部人員,我們保留 A 中的所有記錄,并且僅在 Z 存在時顯示結果。因此,當無法關聯此類日期/用戶時,Z.review_date 將為空。
SELECT A.user, A.Review_date Z.review_date as Previous_review_Date
FROM TABLE A
OUTER APPLY (SELECT review_date
FROM Table B on A.User=B.User and B.Review_date < a.Review_Date
ORDER BY review_Date Desc
FETCH FIRST 1 ROWS ONLY) Z
根據資料量,一種方法與另一種方法相比可能更有效。(見問湯姆文章)
使用您當前的方法:
SELECT A.user, A.Review_Date, lead(A.Review_date) over (partition by A.User ORDER BY A.Review_Date DESC) FROM TABLE A
你的不作業的原因是因為它按日期排序所有記錄;不是那些特定于用戶的。因此,您需要將資料“磁區”給每個用戶,并且只對用戶的查看日期進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422044.html
標籤:
下一篇:從某個日期開始的周數
