根据当前和上一个记录值更新字段/列

时间:2011-12-01 10:50:24

标签: sql sql-server-2008 common-table-expression

我需要帮助根据当前记录和先前记录之间的比较更新字段/列“IsLatest”。我正在使用CTE的语法,我能够获取当前和以前的记录,但我无法根据当前和上一条记录的字段/列“值”更新字段/列“IsLatest”。 / p>

实施例

当前输出

Dates                   Customer    Value   IsLatest
2010-01-01 00:00:00.000    1            12  1

Dates                   Customer    Value   IsLatest
2010-01-01 00:00:00.000    1            12  0
2010-01-02 00:00:00.000    1            30  1

Dates                   Customer    Value   IsLatest
2010-01-01 00:00:00.000    1            12  0
2010-01-02 00:00:00.000    1            30  0
2010-01-03 00:00:00.000    1            13  1

预期最终产出

Dates                   Customer    Value   ValueSetId IsLatest
2010-01-01 00:00:00.000    1            12     12          0
2010-01-01 00:00:00.000    1            12     13          0
2010-01-01 00:00:00.000    1            12     14          0

2010-01-02 00:00:00.000    1            30     12          0
2010-01-02 00:00:00.000    1            30     13          0
2010-01-02 00:00:00.000    1            30     14          0

2010-01-03 00:00:00.000    1            13     12          0
2010-01-03 00:00:00.000    1            13     13          0
2010-01-03 00:00:00.000    1            13     14          0

2010-01-04 00:00:00.000    1            14     12          0
2010-01-04 00:00:00.000    1            14     13          0
2010-01-04 00:00:00.000    1            14     14          1

1 个答案:

答案 0 :(得分:0)

;WITH a AS
(
SELECT 
  Dates Customer Value, 
  row_number() over (partition by customer order by Dates desc, ValueSetId desc) rn
FROM @Customers)
SELECT Dates, Customer, Value, case when RN = 1 then 1 else 0 end IsLatest
FROM a