2017-10-05 3 views
1

Je dois trouver la plus grande oras_key groupée par acco_key. Donc, si acco_key = 5, et se produit dans oras_Key = (1,4,5,7), le résultat devrait être oras_key = 7, acco_key = 5 (le plus grand oras_key). C'est une partie du problème.Trouver la plus grande valeur dans la colonne qui était avant le groupe par l'autre colonne

Autre partie du problème: Je dois trouver tous ces enregistrements - donc les plus gros oras_key, groupés par acco_key. Ensuite, le tri doit être effectué par oras_key.

J'ai déjà essayé de grouper mais je ne sais pas comment trouver la plus grande oras_key si je groupais par acco_key?

Voici le tableau, les données et la sortie désirée:

+----------+----------+----------+ 
| 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 | 
+----------+----------+----------+ 

Tableau définition et les données:

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) 

sortie souhaitée:

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

Répondre

1

Vous pouvez essayer ceci:

;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 

Cependant, comme l'utilisation de la semble fonction MAX() ferait aussi, si votre merc_key est toujours le même:

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

Vous pouvez trouver une démo here.

+0

Merci beaucoup pour vos efforts, ça marche. Peut-être avez-vous un lien vers un bon tutoriel sur le sujet? – FrenkyB

+0

Salut! Vous pouvez utiliser la documentation pour la fonction [MAX()] (https://docs.microsoft.com/en-us/sql/t-sql/functions/max-transact-sql) et [this] (http://mickeystuewe.com/2012/10/28/the-row_number-function-as-an-alternate-to-the-max-function/) article. –

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

Hope this est ce que vous cherchez