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
3 Réponses :
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
Cela a fait exactement ce dont j'avais besoin de faire. Merci beaucoup!
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
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 ...
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;
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!