在SQL中按相等数量的记录分组记录
假设我们有一个带有单个数字列C1的表 我想从每5个连续记录中选择最大C1(按C1排序) 例如:在SQL中按相等数量的记录分组记录,sql,sql-server,Sql,Sql Server,假设我们有一个带有单个数字列C1的表 我想从每5个连续记录中选择最大C1(按C1排序) 例如: sorted C1: 1,3,4,8,9,10,11,13,16,18,21,34,66,67,68,80,82 C1分为5个记录组: 1,3,4,8,9 – 10,11,13,16,18 – 21,34,66,67,68 – 80,82 我希望实现的最终SQL结果(每个组的最大值): 可以这样做吗?您可以使用row\u number()枚举行,然后使用算术进行聚合: select max(c1)
sorted C1: 1,3,4,8,9,10,11,13,16,18,21,34,66,67,68,80,82
C1分为5个记录组:
1,3,4,8,9 – 10,11,13,16,18 – 21,34,66,67,68 – 80,82
我希望实现的最终SQL结果(每个组的最大值):
可以这样做吗?您可以使用
row\u number()
枚举行,然后使用算术进行聚合:
select max(c1)
from (select t.*,
row_number() over (order by c1) as seqnum
from t
) t
group by ceiling( seqnum / 5.0 )
order by max(c1);
是一把小提琴。你说的“记录”是什么意思?行、列、值?“记录”在SQL中没有任何意义。什么是
C1
,一个带分隔符的值,一个有许多行的列,一个有很多列的行?展示您的数据,使其易于理解。使用有意义的词语描述您的数据。@Larnu感谢您的评论。我对SQL表的理解是,我有一个列和行的列表。我本能地用行标识记录,即OLTP方法而不是OLAP。尽管如此,我还是很欣赏现在的“记录”是一个模棱两可的术语,它具有NoSQL存储或面向列的数据库等所有现代功能。你的评论恰到好处,它实际上让我想到了我对旧时代术语的理解方面的假设,或者ICT术语在总体上是如何变化的。我不确定它是否正确。我刚刚执行,我认为结果(最多5条记录)将是递增顺序,但它们是随机的。没有order by子句,结果集中的行没有定义的顺序。@Larnu。这就是天花()
处理的。@KarolKolenda。结果集的顺序是任意的,除非存在由指定的顺序。我会让你思考为什么它会起作用。@Larnu。我加了一把小提琴。它生成OP指定的结果。
select max(c1)
from (select t.*,
row_number() over (order by c1) as seqnum
from t
) t
group by ceiling( seqnum / 5.0 )
order by max(c1);