相关疑难解决方法(0)

获取每组最高/最小<whatever>的记录

怎么做?

这个问题的前标题是" 在带有子查询的复杂查询中使用等级(@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 …

mysql subquery rank greatest-n-per-group

84
推荐指数
1
解决办法
3万
查看次数

将数字间隔分成组

我有下面的数字序列,每次下一个数字与前一个值相差一个以上单位时,我想制作一组新数字,即打破连续间隔

药片

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)

sql sql-server intervals dense-rank gaps-and-islands

2
推荐指数
1
解决办法
1463
查看次数