2010-05-17 4 views
0

J'ai une table qui ressemble à ceci:Max (SQL Server)

BARCODE  | PRICE | STARTDATE 
007023819815 | 159000 | 2008-11-17 00:00:00.000 
007023819815 | 319000 | 2009-02-01 00:00:00.000 

Comment puis-je choisir je peux obtenir le résultat comme celui-ci:

BARCODE  | PRICE | STARTDATE 
007023819815 | 319000 | 2009-02-01 00:00:00.000 

sélectionnez à l'aide max date.

Merci d'avance.

+1

Cochez cette réponse à une question similaire en changeant la révision en startdate: http://stackoverflow.com/questions/95866/select-max-in-group – DavGarcia

+0

@ rah.deex: J'ai reformaté votre question, jetez un oeil à la nouvelle version pour en savoir plus sur le formatage (http://stackoverflow.com/editing-help) –

+0

@Peter Lang: Merci M. Peter .. Je suis sory à ce sujet .. – RahdixC9

Répondre

1

Une façon élégante de le faire est d'utiliser la fonction analytique row_number:

SELECT barcode, price, startdate 
FROM (
     SELECT * 
     , ROW_NUMBER() OVER (PARTITION BY barcode ORDER BY startdate DESC) as rn 
     FROM YourTable 
     ) subquery 
WHERE rn = 1 

Si la performance est un problème, consultez quelques options plus complexes this blog post.

+1

Je pense, il vous manque 'DESC' à côté de' ORDER BY startdate' – shahkalpesh

+0

@shahkalpesh: Merci, édité – Andomar

2
SELECT TOP 1 barcode, price, startdate 
FROM TableName 
ORDER BY startdate DESC 

Ou s'il peut y avoir plusieurs lignes.

SELECT barcode, price, startdate 
FROM TableName A 
WHERE startdate = (SELECT max(startdate) FROM TableName B WHERE B.barcode = A.barcode) 

MISE À JOUR changé seconde requête pour afficher les valeurs maximum par code à barres.

+1

Cela ne sélectionnera que les lignes avec la date de début maximale, pas la date de début maximale par code-barres – Andomar

+0

Modifié, merci :) – hgulyan