SQL:仅检索其值已更改的记录

Mik*_*ler 6 sql sql-server

抱歉,这是一个不起眼的标题.我会随着时间进行编辑.

我有一张桌子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)


Dav*_*dge 5

如果您的 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)