2011-12-01 117 views
0

根据当前记录与先前记录之间的比较,需要帮助更新字段/列“IsLatest”。我使用的是CTE的语法,我可以获取当前和前一个记录,但是我无法根据当前和前一个记录的字段/列“值”更新我所需要的字段/列“IsLatest”。根据当前记录值和先前记录值更新字段/列

电流输出

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 
+0

请问你的CTE样子? –

+0

;具有CustCTE AS(SELECT客户, 价值, 日期, ROW_NUMBER()OVER(PARTITION BY客户ORDER BY日期)ROWNUM FROM @Customers), –

回答

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 
+0

喜t-clausen.dk,感谢这一点。我有类似于上面的代码,但是,我没有使用DESC,因为我的想法是使用当前和以前的记录,这让我陷入了一种转折。 –

+0

嗨t-clausen.dk,只是另一个问题,如果上表中有另一个字段唯一标识一行,但上面的输出仍需要相同,我将如何更改代码。示例每个日期,每个客户你有3个不同的值。附加字段“PeriodSetId”以小时E.g 12,15 14等为单位标识记录。 –

+0

@LindsayFisher不确定你在问什么,你能否用预期的结果和testdata来改变你的问题来说明? –

相关问题