2009-10-16 12 views
0

Disons que j'ai un tableau: --------------------------- ----------- | ID | DATE | GROUPE | RÉSULTAT | -------------------------------------- | 1 | 01/06 | Groupe1 | 12345 | | 2 | 01/05 | Group2 | 54321 | | 3 | 01/04 | Groupe1 | 11111 | --------------------------------------SQL Order By et "Not-So-Much Group"

Je veux commander le résultat par la date la plus récente en haut, mais regroupez la colonne "groupe", mais toujours des entrées distinctes. Le résultat que je veux serait:

1 | 01/06 | Group1 | 12345 
3 | 01/04 | Group1 | 11111 
2 | 01/05 | Group2 | 54321 

Qu'est-ce qu'une requête pour obtenir ce résultat?

merci!

EDIT:

J'utilise MSSQL. Je vais regarder dans la traduction de la requête Oracle dans MS SQL et signaler mes résultats.

EDIT

SQL Server 2000 et plus de/PARTITION est pas pris en charge = [

Merci!

+0

entrées distinctes de quoi? – Dave

+0

pas nécessairement entrées distinctes, mais je ne veux pas combiner les entrées. – theShingles

Répondre

1
declare @table table (
    ID int not null, 
    [DATE] smalldatetime not null, 
    [GROUP] varchar(10) not null, 
    [RESULT] varchar(10) not null 
) 

insert @table values (1, '2009-01-06', 'Group1', '12345') 
insert @table values (2, '2009-01-05', 'Group2', '12345') 
insert @table values (3, '2009-01-04', 'Group1', '12345') 


select t.* 
from @table t 
inner join (
    select 
     max([date]) as [order-date], 
     [GROUP] 
    from @table orderer 
    group by 
     [GROUP] 
) x 
    on t.[GROUP] = x.[GROUP] 
order by 
    x.[order-date] desc, 
    t.[GROUP], 
    t.[DATE] desc 
+0

merci beaucoup! Cela a fonctionné! – theShingles

1

utiliser une clause order by avec deux params:

...order by group, date desc 

cela suppose que votre colonne de date ne tenir les dates et non Varchars

+0

Ceci sera trié par groupe, par ordre alphabétique. Il veut que les groupes commandés par la date la plus récente dans ce groupe –

+0

HOW sur si vous échangez les, ordre par date desc, group asc – HLGEM

+0

juste une commande par ne fonctionnera pas pour cette instance –

2

Vous devez spécifier ce SGBDR que vous utilisez. Cette réponse est pour Oracle, peut ne pas fonctionner dans d'autres systèmes.

SELECT * FROM table 
ORDER BY MAX(date) OVER (PARTITION BY group) DESC, group, date DESC 
+0

+1 pour votre réponse. mais pour le groupe de nom de colonne obtenir l'erreur. Si nous changeons cela fonctionnera. – anishMarokey

+0

Existe-t-il une traduction MS SQL pour cette requête? Il ne reconnaît pas PARTITION, bien que http://msdn.microsoft.com/en-us/library/ms189461.aspx montre le support pour cela. – theShingles

0
SELECT table2.myID, 
table2.mydate, 
table2.mygroup, 
table2.myresult 
FROM (SELECT DISTINCT mygroup FROM testtable as table1) as grouptable 
JOIN testtable as table2 
ON grouptable.mygroup = table2.mygroup 
ORDER BY grouptable.mygroup,table2.mydate 

DÉSOLÉ, ne parvenais pas à utiliser des colonnes qui ont été les noms réservés, renommer les colonnes pour le faire fonctionner :)

ce qui est beaucoup plus simple que la réponse acceptée btw.

+0

cela ne résout pas le problème – Dave