簡體   English   中英

sql row_number重置為0值

[英]sql row_number reset at 0 value

我有一個具有以下值的表:

Value
0
1.2
1.3
1.4
0
1.2
1.3
1.4

從以上數據中,我需要將集合重置為0后求和2個最高數字,因此總數為2.8。

如果我可以讓row_number()每次都為0時重新啟動,那將是完美的,但是它不提供此類功能。

謝謝。

DECLARE @your_table TABLE (id INT,value FLOAT) 

INSERT INTO @your_table
SELECT 1,0 UNION ALL
SELECT 2,1.2 UNION ALL
SELECT 3,1.3 UNION ALL
SELECT 4,1.4 UNION ALL
SELECT 5,0 UNION ALL
SELECT 6,1.2 UNION ALL
SELECT 7,1.3 UNION ALL
SELECT 8,1.4


;WITH T AS
(
SELECT 
   ROW_NUMBER() OVER (PARTITION BY CASE WHEN value = 0 THEN 0 ELSE 1 END ORDER BY id)-
   ROW_NUMBER() OVER (ORDER BY id ) AS Grp
,id,value
FROM @your_table
), T2 AS
(
SELECT MAX(value) AS value
FROM T
WHERE value<>0
GROUP BY Grp)
SELECT SUM(value)
FROM T2

好吧,您是否嘗試將RANK或DENSE_RANK與PARTITION BY子句一起使用?

好的,我得到了與@Martin相同的解決方案,並且我承認@marc_s對此沒有什么簡單的。 而且我還不夠聰明,無法弄清楚兩個row_number組之間的關系,並將它們相減會得出此表。

id value row_number
1  0.0    0
2  1.2   -1
3  1.3   -1
4  1.4   -1
5  0.0   -3
6  1.2   -2
7  1.3   -2
8  1.4   -2

從這里開始,我認為接下來該做什么很明顯。 忽略零,將row_number分組,使用最大聚合值,瞧瞧!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM