在列之前找到其他列的最大值

时间:2017-10-05 07:10:06

标签: sql-server tsql sql-server-2012

我必须找到按acco_key分组的最大oras_key。 因此,如果acco_key = 5,并且发生在oras_Key =(1,4,5,7)中,则结果应为oras_key = 7,acco_key = 5(最大oras_key)。 这是问题的一部分。

问题的其他部分: 我必须找到所有这些记录 - 所以最大的oras_key,按acco_key分组。 之后,必须通过oras_key进行排序。

我已经尝试过分组,但如果我按照acco_key进行分组,我就不知道如何找到最大的oras_key?

这是表格,数据和所需的输出:

+----------+----------+----------+
| oras_key | merc_key | acco_key |
+----------+----------+----------+
|        1 |        3 |        5 |
|        2 |        3 |        6 |
|        3 |        3 |        7 |
|        4 |        3 |        5 |
|        5 |        3 |        5 |
|        7 |        3 |        5 |
|        8 |        3 |        6 |
|        9 |        3 |        6 |
|       10 |        3 |        6 |
|       11 |        3 |        8 |
|       12 |        3 |        8 |
|       13 |        3 |        8 |
|       14 |        3 |        9 |
+----------+----------+----------+

表格定义和数据:

 declare @tblTemp3 table
 (
 oras_key int,
 merc_key int,
 acco_key int
 )

 insert into @tblTemp3 (oras_key, merc_key, acco_key)
 values(1, 3, 5),
 (2, 3, 6),
 (3, 3, 7),
 (4, 3, 5),
 (5, 3, 5),
 (7, 3, 5),
 (8, 3, 6),
 (9, 3, 6),
 (10, 3, 6),
 (11, 3, 8),
 (12, 3, 8),
 (13, 3, 8),
 (14, 3, 9)

期望的输出:

+----------+----------+----------+
| oras_key | merc_key | acco_key |
+----------+----------+----------+
|       14 |        3 |        9 |
|       13 |        3 |        8 |
|       10 |        3 |        6 |
|        7 |        3 |        5 |
|        3 |        3 |        7 |
+----------+----------+----------+

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

;with cte as 
(
    select r = row_number() over (partition by acco_key order by oras_key desc)
         , *
    from @tblTemp3
)
select oras_key, merc_key, acco_key 
from cte 
where r = 1 
order by oras_key desc

但是,如果您的MAX()始终相同,似乎使用merc_key函数也是如此:

select max(oras_key) oras_key, merc_key, acco_key
from @tblTemp3
group by acco_key, merc_key
order by oras_key desc 

您可以找到演示here

答案 1 :(得分:1)

 Select max(oras_key) as oras_key,merc_key ,acco_key from @tblTemp3 group by 
 acco_key,merc_key
 order by 1 desc

希望这就是你要找的东西