Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中按相等数量的记录分组记录_Sql_Sql Server - Fatal编程技术网

在SQL中按相等数量的记录分组记录

在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)

假设我们有一个带有单个数字列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)
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);