我正在寻找以前的记录(记录)的ID基于日期.某些ID对同一日期有多个记录.

我try 了LAG,但没有奏效,因为我一次约会有多个记录(请参见下面我try 的内容).

SELECT 
    ID, Rec, Date,
    LAG(Rec) OVER (PARTITION BY ID ORDER BY Date DESC) AS [Previous Rec]
FROM 
    [Source Table]

还可以使用什么来获得所需的结果(请参见下文).

源表:

ID Rec Date
40A 1022 02/03/2022
40A 1029 02/03/2022
40A 5542 04/11/2022
40A 7693 04/11/2022
40A 1580 06/10/2022
40A 9700 08/15/2022
88A 9911 09/10/2022
88A 1033 12/15/2022
88A 1443 03/15/2023

预期结果:

ID Rec Date Previous Rec Previous Date
40A 1022 02/03/2022 NULL NULL
40A 1029 02/03/2022 NULL NULL
40A 5542 04/11/2022 1022 02/03/2022
40A 5542 04/11/2022 1029 02/03/2022
40A 7693 04/11/2022 1022 02/03/2022
40A 7693 04/11/2022 1029 02/03/2022
40A 1580 06/10/2022 5542 04/11/2022
40A 1580 06/10/2022 7693 04/11/2022
40A 9700 08/15/2022 1580 06/10/2022
88A 9911 09/10/2022 NULL NULL
88A 1033 12/15/2022 9911 09/10/2022
88A 1443 03/15/2023 1033 12/15/2022

推荐答案

对于这种类型的练习,我个人更喜欢的解决方案是将所需的先前日期与当前行关联起来,然后使用它来连接,我发现这使意图变得更加明显:

select t.Id, t.Rec, t.Date, pt.Rec Previous_Rec, pt.Date PreviousDate
from t
outer apply(
  select max(Date)
  from t t2
  where t2.Id = t.Id and t2.date < t.Date
)pd(Date)
left join t pt on pt.Id = t.Id and pt.Date = pd.Date
order by t.Id, t.Date;

Sql相关问答推荐

在SQL中向每个子字节组添加字节行

SQL更新,在2个额外的表上使用内部连接

SQL Oracle条件分组依据

如何利用单列历史SQLsnowflake获得合并结果

SQL:计算与另一列中给定值互斥的匹配项

值对于类型字符来说太长

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

按分类标准检索记录

在一个子查询中签入ID';S,如果未返回,则签入另一个子查询

是否可以为表中的所有列生成散列值?

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

如何在MS Access中基于另外两个表自动填充一个表中的字段?

如何在sparksql查询中使用日期值?

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

创建定时器以更新Gridview

在Snowflake中如何使用SQL对版本字符串进行排序?

雅典娜弄错了操作顺序

Postgres 条件求和函数

在 SQL 的每行选项中 Select 最大值

在 PostgreSQL 中,如何将数组中的每个元素用作另一个表中的键?