我必须找到按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 |
+----------+----------+----------+
答案 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
希望这就是你要找的东西