8
votes

TSQL sélectionnant distinct basé sur la date la plus élevée

Notre base de données a un groupe d'enregistrements qui ont le même numéro de facture, mais ont des dates différentes et des notes différentes.

Donc, vous pourriez avoir quelque chose comme P>

3622      9/29/1010    Some more notes
4212      10/10/2010   different notes


0 commentaires

3 Réponses :


9
votes
select invoice, date, notes
from table 
inner join (select invoice, max(date) as date from table group by invoice) as max_date_table      
    on table.invoice = max_date_table.invoice and table.date = max_date_table.date

1 commentaires

Cela a fait exactement ce dont j'avais besoin de faire. Merci beaucoup!



1
votes

Essayez:

SELECT I.* 
FROM MyInvoice AS I
INNER JOIN 
           (SELECT Invoice, MAX([Date]) AS MaxDate
            FROM MyInvoice 
            GROUP BY Invoice
           ) AS M ON I.Date = M.MaxDate 
                 AND I.Invoice = M.Invoice


1 commentaires

Je pense que votre requête intérieure est fausse ... il ne retournera que 1 rangée. Ensuite, toute la requête ne renverra qu'une rangée ...



13
votes

Utiliser des fonctions analytiques:

WITH TT AS (
    SELECT invoice, date, notes, RANK() OVER(PARTITION BY invoice ORDER BY date DESC) AS R
    FROM table
)
SELECT invoice, date, notes
FROM TT
WHERE R = 1;


2 commentaires

Merci Vincent. Je cherchais cette solution toute la journée. Tu as fait ma journée :)


Étonnamment, cette question a relativement peu de points de vue. Cette requête a été l'une des réponses les plus utiles qui m'a aidé dans de nombreux scénarios!