可以使用CTE为这个和自加入
CREATE TABLE test (
StartOfWeek DATETIME,
Total INT
)
INSERT INTO test
VALUES ('1/17/2016',8),
('1/24/2016',8),
('1/31/2016',10),
('2/7/2016',10),
('2/14/2016',14),
('2/21/2016',10),
('2/28/2016',10)
;WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (ORDER BY StartOfWeek) Rn
FROM test
)
SELECT c1.StartOfWeek,
c1.Total,
-- incremement by 1 if Total value changes
SUM(CASE WHEN c1.Total= c2.Total THEN 0
ELSE 1 END) OVER (ORDER BY c1.Rn) AS RowNumber
FROM cte c1
LEFT JOIN cte c2 ON c1.Rn = c2.Rn + 1
Result
StartOfWeek Total RowNumber
----------------------- ----------- -----------
2016-01-17 00:00:00.000 8 1
2016-01-24 00:00:00.000 8 1
2016-01-31 00:00:00.000 10 2
2016-02-07 00:00:00.000 10 2
2016-02-14 00:00:00.000 14 3
2016-02-21 00:00:00.000 10 4
2016-02-28 00:00:00.000 10 4
请编辑您的问题,以显示你已经尝试了什么。此外,你还不完全清楚你想要完成什么。 – mituw16
在@ mituw16的评论中详细阐述,用什么逻辑来计算'RowNumber'并不明显。一个天真的猜测可能是“什么时候,由'StartOfWeek'命令,'Total'的值变化,增加'RowNumber'”请编辑您的问题以包含此信息。 –
RowNumber指的是什么? – jim