怎么做?
这个问题的前标题是" 在带有子查询的复杂查询中使用等级(@Rank:= @Rank + 1) - 它会起作用吗? "因为我正在寻找使用等级的解决方案,但现在我看到Bill发布的解决方案是好多了.
原始问题:
我正在尝试编写一个查询,该查询将根据定义的顺序从每个组获取最后一条记录:
SET @Rank=0;
select s.*
from (select GroupId, max(Rank) AS MaxRank
from (select GroupId, @Rank := @Rank + 1 AS Rank
from Table
order by OrderField
) as t
group by GroupId) as t
join (
select *, @Rank := @Rank + 1 AS Rank
from Table
order by OrderField
) as s
on t.GroupId = s.GroupId and t.MaxRank = s.Rank
order by OrderField
Run Code Online (Sandbox Code Playgroud)
表达式@Rank := @Rank + 1 …
我有下面的数字序列,每次下一个数字与前一个值相差一个以上单位时,我想制作一组新数字,即打破连续间隔
药片
value
1
2
3
5
6
7
15
16
17
18
Run Code Online (Sandbox Code Playgroud)
由连续区间组成的组:
min max
1 3
5 7
15 18
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用dense_rank() 函数对行进行编号,如下例所示,然后我将能够按rankNumber 进行分组并获得MIN(value) 和MAX(value),但我没有找到要使用的模式此函数的 PARTITION BY 子句
value rankNumber
1 1
2 1
3 1
5 2
6 2
7 2
15 3
16 3
17 3
18 3
WITH T2 AS
(
SELECT value, LEAD(value) OVER(ORDER BY value) as nextValue
FROM T
)
SELECT value, DENSE_RANK()
OVER(PARTITION BY CASE WHEN nextValue - value > 1 THEN 1 …Run Code Online (Sandbox Code Playgroud)