如何在每个组(Sql或SAS)中获得上面的最大行数

如何在每个组(Sql或SAS)中获得上面的最大行数,sql,sas,max,teradata,Sql,Sas,Max,Teradata,数据: 期望的结果(我希望得到每组中上面行的最大值) 非常感谢!:) 如果数据库支持窗口聚合,则 ID step max_step 100 1 1 100 2 2 100 3 3 100 1 3 200 2 2 200 3 3 200 1 3 如果不考虑ID而希望从上面的行中最大化步长,则通过删除分区 SELECT id, step, Max(step) OVER( partition BY

数据:

期望的结果(我希望得到每组中上面行的最大值)


非常感谢!:)

如果数据库支持窗口聚合,则

ID   step  max_step
100  1     1
100  2     2
100  3     3
100  1     3
200  2     2
200  3     3
200  1     3
如果不考虑
ID
而希望从上面的行中最大化步长,则通过删除
分区

SELECT id,
       step,
       Max(step) OVER( partition BY ID ORDER BY "order") as max_step
From yourtable

如果您想了解行顺序,那么SAS将是这里更简单的答案

SELECT id,
       step,
       Max(step) OVER(ORDER BY "order") as max_step
From yourtable
您需要一个累积最大值:

由于Teradata不遵循标准SQL,默认为
range unbounded previous
,因此您需要添加它(这是推荐的)

last_值
默认为累积值:


当然,您也可以在前面添加无限制的
行。

什么数据库和什么版本?请适当地标记您的问题。谢谢,它在Teradata中。您不能在SQL中做您想做的事情。SQL表表示无序集。因此,如果没有列来确定顺序,就没有上面行的概念。在SAS中,您可以使用带有
retain
的数据步骤。您是对的,我遗漏了一列“order”,这意味着这行数据进入数据库的顺序。我已经编辑了这个问题。谢谢,我试过了。但似乎只能得到每组的最大值。我想得到每组中上面的最大行数(包括当前行)。@Sylvia-但在您预期的结果中,情况并非如此。对于
ID=2
max_step
中,您有
2
,即使以前的记录有
3
@Prdp,它会用新的ID重置。但是
ID=2
的第一行需要有一个
2
。可能我的描述不够清楚。Max由不同的id表示。所以“id=100”中的上一条记录和“id=200”中的Max无关。乔:答案是有帮助的。@Sylvia-这正是我的第一个问题所做的非常感谢!这正是我想要的!真的很感激!
SELECT id,
       step,
       Max(step) OVER(ORDER BY "order") as max_step
From yourtable
data want;
  set have;
  by ID;
  retain max_step;
  if first.id then call missing(max_step);
  max_step = max(step,max_step);
run;
max(step)
over(partition by id
     order by ordercol
     rows unbounded preceding)
last_value(step)
over(partition by id
     order by ordercol)