在附加列中显示用户的上一个日期



我有一个用户列表和每个用户对应的评论日期列表,用户可以有多个与他们相关的评论。我需要做的是创建一个额外的列,向我显示用户以前的评论日期,如果他们没有以前的评论,我需要它为空。我需要的结果示例如下所示,粗体列是我想要添加的列:

|用户|审核日期|上一次审核日期
|---------------|---------------

|1122334|2022年1月1日|2021年6月6日|1122334 |2021年6日|2021年1月6日
|112233 4|2021年1日|null
|2244668|2021年10月1日|2021年4月1日
|2244668|2021年4月01日|null
|3344556|2021年11月10日|2021年3月10日
|3334556|2021年3年10日|null

您可以在示例中看到,第1行用户的上次审核日期将与第2行上的用户审核日期相同

我已经尝试使用以下内容:

select user, lead(review_date) over order(order by user,review_date desc) as Previous_review_date

这段代码一直有效,直到我需要它是一个null值,在这种情况下,它只需添加一个无关用户的上一次审查日期。

如有任何帮助,我们将不胜感激。

很确定OUTER APPLY在这里也可以使用限制。

请注意,如果您需要的不仅仅是一列数据,这可能会很有用。

一些文档-外部应用

询问tom-LINQ,交叉/外部应用

从本质上讲,外部应用程序将为表A中的每一行运行一次子查询,将两者之间的结果关联起来。由于我们对结果进行了限制和排序;我们将只返回一个审核日期小于审核日期的记录。现在,作为一个外部,我们保留来自A的所有记录,并且只在Z存在时显示它们的结果。因此,当没有这样的日期/用户可以关联时,Z.review_date将为null。

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

你的不起作用的原因是它按日期排序所有记录;而不是那些特定于用户的。所以你需要";分区";将数据发送给每个用户,并仅按该用户的审核日期排序。

您需要对数据进行分区,以确定潜在价值

select user, lead(review_date) over order(partition by user order by review_date desc) as Previous_review_date

相关内容

最新更新