首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重复行的情况下获取最大上一行,以及每个最大列取的优先级

问如何在重复行的情况下获取最大上一行,以及每个最大列取的优先级
EN

Stack Overflow用户
提问于 2020-07-21 23:16:42
回答 2查看 129关注 0票数 0

我有一个表,其中包含帐户行和有关它们的详细信息。我创建了一个符合我的条件的临时表,并将其命名为#temp2。现在,我需要做的是从原始表中获取满足其他条件的最大前一行,该条件不同于已被带到临时表的当前行。我正在处理的问题是,我需要取上一行的最大值。简单的方法是,如果帐户有重复的行,最大前一行将在最大日期列上。如果重复的行也有相同的日期,我需要取max Code列,如果帐户有具有重复日期的行和Code列,则我将取Amount列。帐户最大上一行的优先级为-日期、代码、金额。我需要取最大值的前几行的帐户示例:

代码语言:javascript
复制
       **Account**     **Date**    **Code**    **Amount** 
1.        123           31/05/20       6           200  
2.        123           31/05/20       6           200
3.        123           31/05/20       6           300
4.        124           31/05/20       7           100
5.        124           31/05/20       8            90

帐户123的预期结果是第3行,帐户124的预期结果是第5行。每个帐户的当前行30/06/20要么从#temp表发出,要么根据不同的列条件包括在内。我的方法的一小段:

代码语言:javascript
复制
SELECT  account, max(Datecolumn) , max(Code) , max(Amount) --,  more columns...
FROM Mytable
WHERE Datecolumn  <   ( select  max(Datecolumn)  from #temp )
and Code          <   ( select  max(Code)        from #temp  )
and Amount        <   ( select  max(Amount)      from #temp )
-- different conditions for different columns....
GROUP BY  account  --, more columns...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-21 23:22:35

您可以使用ROW_NUMBER()来标识要为每个帐户指定的行。例如:

代码语言:javascript
复制
select
from (
  select *,
    row_number() over(partition by account 
                      order by datecolumn desc, code desc, amount desc
                     ) as rn
  from MyTable
) x
where rn = 1

对于每个帐户,此查询将按datecolumn desc, code desc, amount desc对行进行排序,并从1开始按顺序分配一个值。然后,WHERE子句删除值不同于1的所有其他行,只保留每个帐户的“最佳”行。

票数 1
EN

Stack Overflow用户

发布于 2020-07-21 23:22:06

您可以使用窗口函数- row_number()

代码语言:javascript
复制
select * from
(
select *,row_number() over(partition by account order by id desc) as rn
from tablename
)A where rn=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63017701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档