Une solution commune pour ce genre de problème est de choisir le Max (datesold) et obtenir la dernière de cette façon. C'est correct si la combinaison custid/datesold est unique, mais s'il y avait deux ordres le même jour, cela peut provoquer des doublons.
Si vous avez SQL 2005 ou plus, vous pouvez utiliser la fonction ROW_NUMBER pour classer chaque commandes des clients et sélectionnez la première pour chacun:
SELECT custid, ordid, qty, datesold
FROM (
SELECT *,
Row_Number() OVER (PARTITION BY custid ORDER BY datesold desc) as 'Rank'
FROM tbl
)
WHERE Rank = 1
pour vous assurer qu'il prend toujours le même article, même si ils ont la même date, ajoutez un peu plus d'éléments (tels que RowID, recieptNumber) dans la clause ORDER BY du Row_number.
Si vous n'avez pas SQL 2005, en ajoutant colonne d'identité peut faire des choses similaires:
SELECT custid, ordid, qty, datesold
FROM tbl
WHERE id =
(SELECT TOP 1 id FROM tbl a WHERE custid = a.custID ORDER BY dateSold)
L'inconvénient est qu'il y aura une recherche de table au moins pour chaque client, sinon chaque ligne .
Si vous êtes chanceux, vous voulez obtenir la dernière commande traitée, vous pouvez:
SELECT custid, ordid, qty, datesold
FROM tbl
INNER JOIN (
SELECT a.id FROM tbl a GROUP BY tbl.custId
) s ON tbl.id = s.id
Avez-vous SQL 2005? –