J'ai du mal à find une requête pour get datatables de return dont j'ai besoin à partir du tableau suivant dans SQL:
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