SQL Server仅检查以前的记录
我有以下列:type(char)、date、price。 我想检查一下同一型号的价格在以前的记录中是否没有变化 我尝试了这个开始:SQL Server仅检查以前的记录,sql,sql-server,record,Sql,Sql Server,Record,我有以下列:type(char)、date、price。 我想检查一下同一型号的价格在以前的记录中是否没有变化 我尝试了这个开始: SELECT * FROM table t1, table t2 WHERE t1.date > t2.date and t1.type = t2.type 我只想检查之前的日期,而不是每个较小的日期 此表存储价格变化 产品类型 更改日期 价格 “A” 2020.02.18 500 “A” 2020.02.20 750 “A” 2020.02.22 800
SELECT *
FROM table t1, table t2
WHERE t1.date > t2.date and t1.type = t2.type
我只想检查之前的日期,而不是每个较小的日期
此表存储价格变化
产品类型
更改日期
价格
“A”
2020.02.18
500
“A”
2020.02.20
750
“A”
2020.02.22
800
“B”
2020.02.22
500
“B”
2020.02.27
900
“C”
2020.02.22
400
“C”
2020.02.29
700
试试这个:
select
t.*,
lag(price) over(partition by type order by date) as previous_price
from table t
请提供示例数据、所需结果和适当的数据库标记。如果您只想检查一个最近的先前数据而不是所有先前数据,我认为您可以使用
lag()
或lead()
。但是我强烈建议不要使用date
或type
作为列名,特别是那些保留关键字,最好只添加一些前缀,如:table\u date
。是否可以使用自联接来实现这一点?90年代的人称之为-他们希望恢复旧式联接。那么,我如何筛选price=previous_price呢?@Panke将上面的整个查询放在一个子查询中,然后从中进行选择。例如,如果我们将上面的查询标记为X(为了可读性),那么选择*from(X),其中price=previous\u price将稍后试用,谢谢您的回答!