抱歉,这是一个不起眼的标题.我会随着时间进行编辑.
我有一张桌子RateTable:
| Code | Date | Rate |
B001 2009-01-01 1.05
B001 2009-01-02 1.05
B001 2009-01-03 1.05
B001 2009-01-04 1.05
B001 2009-01-05 1.06
B001 2009-01-06 1.06
B001 2009-01-07 1.06
B001 2009-01-08 1.07
Run Code Online (Sandbox Code Playgroud)
每天都有一个条目,但费率很少变化.我是否可以编写一个只返回发生速率变化的行的SQL查询?我正在使用SQLServer
Dav*_*d M 15
如果我读得正确,那么您不是要查找已修改的行,而是查找速率从上一个日期开始变化的行.此查询或类似的东西应该这样做:
SELECT r1.Code, r1.Date, r1.Rate
FROM RateTable r1
WHERE r1.Rate <> (SELECT TOP 1 Rate
FROM RateTable
WHERE Date < r1.Date
ORDER BY Date DESC)
Run Code Online (Sandbox Code Playgroud)
如果您的 RDBMS 支持分析函数,那么最佳方法几乎肯定是这样的:
select code, date, rate, last_rate
from
(
select code,
date,
rate,
lag(rate) over (partition by code order by date) last_rate
from ratetable
) my_tb
where my_tb.rate != my_tb.last_rate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15802 次 |
| 最近记录: |