Obtenir des valeurs basées sur le maximum d'une autre colonne

J'ai du mal à find une requête pour get datatables de return dont j'ai besoin à partir du tableau suivant dans SQL:

Structure de la table

Je voudrais get Value1 et Value2 pour l'ordre maximum dans une plage de dates et de périodes donnée. J'ai la requête suivante pour get le numéro de command maximum pour chaque paire de dates dans une plage donnée – cependant, je n'arrive pas à get les valeurs Value1 et Value2 pour cet ordre.

SELECT Date, Period, MAX(Order) FROM tableName WHERE ((Date = '2017-02-27' AND Period>= 10) OR (Date = '2017-02-28' AND Period<= 10)) GROUP BY Date, Period 

Utilisez row_number() :

 SELECT Date, Period, Order FROM (SELECT t.*, ROW_NUMBER() OVER (PARTITION BY Date, Period ORDER BY Order DESC) as seqnum FROM tableName WHERE (Date = '2017-02-27' AND Period >= 10) OR (Date = '2017-02-28' AND Period <= 10) ) t WHERE seqnum = 1; 

Vous pouvez utiliser la fonction Window row_number pour cela:

 select * from ( select t.*, row_number() over ( partition by date, period order by [Order] desc ) rn from your_table t where ( date = '2017-02-27' and Period >= 10 ) or ( date = '2017-02-28' and Period <= 10 ) ) t where rn = 1; 

Si tout ce que vous voulez est la ligne du haut d'un set de résultats, pourquoi ne pas utiliser l'opérateur TOP?

 SELECT TOP 1 [Date], [Period], [Order], Value1, Value2 FROM tableName WHERE ((Date = '2017-02-27' AND Period>= 10) OR (Date = '2017-02-28' AND Period<= 10)) ORDER BY [Order] DESC