【发布时间】:2016-01-06 03:32:13
【问题描述】:
抱歉,主题不好,但我不知道该怎么称呼它..
我有一张这样的表:
+-----++-----+
| Id ||Count|
+-----++-----+
| 1 || 1 |
+-----++-----+
| 2 || 5 |
+-----++-----+
| 3 || 8 |
+-----++-----+
| 4 || 3 |
+-----++-----+
| 5 || 6 |
+-----++-----+
| 6 || 8 |
+-----++-----+
| 7 || 3 |
+-----++-----+
| 8 || 1 |
+-----++-----+
我正在尝试从该表中进行选择,其中每次 row1 + row2 + row3(等)的总和达到 10,然后它是“HIT”,并且计数重新开始。
请求的输出:
+-----++-----++-----+
| Id ||Count|| HIT |
+-----++-----++-----+
| 1 || 1 || N | Count = 1
+-----++-----++-----+
| 2 || 5 || N | Count = 6
+-----++-----++-----+
| 3 || 8 || Y | Count = 14 (over 10)
+-----++-----++-----+
| 4 || 3 || N | Count = 3
+-----++-----++-----+
| 5 || 6 || N | Count = 9
+-----++-----++-----+
| 6 || 8 || Y | Count = 17 (over 10..)
+-----++-----++-----+
| 7 || 3 || N | Count = 3
+-----++-----++-----+
| 8 || 1 || N | Count = 4
+-----++-----++-----+
我该如何做到这一点,并获得最佳性能?我不知道..
【问题讨论】:
-
使用dense_rank()的有趣想法。也许这会奏效。否则我担心可能需要一个带有游标的存储过程。
-
如果
dense_rank()不能解决问题,您也可以使用递归视图来实现。我相信dense_rank()路由会得到更好的优化。 -
这张桌子很大..我会试试看是否可以使用dense_rank
-
同意 100%。如果表是数千个,那么没什么大不了的,但如果它更大,那么递归将在这里表现不佳。
标签: sql sql-server tsql