2010-04-29 9 views
0

J'ai la table des articles ai eugroupe par une valeur d'une autre colonne

ID identity autoincement, IDArticle: nvarchar(100) ,IDCar nvarchar(100), createddate 

Comment convertir ceci:

SELECT IDCar , MAX(createddate) 
FROM Articles 
GROUP BY IDCar 

pour obtenir IDArticle par exemple:

1 art1 BWM 5-21-2010 
2 art2 BMW 5-24-2010 
3 art3 BMW 5-31-2010 
4 art4 Porshe 5-31-2010 
5 art5 Porshe 6-1-2010 

résultat Expecting est:

art3 
art5 

Il est pas reproduit avec: Sql query number of occurance

Répondre

4
SELECT a.IDArticle 
FROM 
(
    SELECT IDCar , MAX(createddate) as max_date 
    FROM Articles 
    GROUP BY IDCar 
) max 
INNER JOIN Articles a ON a.IDCar = max.IDCar and a.createddate = max.max_date 
+1

+1, mais 'a.createdate = max.max_date' doit être' a.createddate = max.max_date' –

+0

+1 de ma part. .... –

0
SELECT outerTable.IDArticle 
FROM Articles outerTable 
WHERE outerTable.createddate = 
    (SELECT MAX(innerTable.createddate) 
    FROM Articles innerTable 
    WHERE outerTable.IDCar = innerTable.IDCar 
    GROUP BY innerTable.IDCar) 
+1

fonctionne que si vous remplacez les mots réservés: '' outer' et inner' avec de meilleurs noms d'alias de table. sinon SQL Server vous donne: 'Msg 156, niveau 15, état 1, ligne 1 Syntaxe incorrecte près du mot clé 'outer' .' –

+0

@KM - merci whoops! Je vais corriger ce – froadie

0
WITH ArticlesMaxDate (IDCar, MaxCreatedDate) AS 
(
    SELECT 
     IDCar , MAX(createddate) AS MaxCreatedDate 
    FROM 
     Articles 
    GROUP BY 
     IDCar 
) 
SELECT 
    a.IDcar 
    , a.IDArticle 
    , amd.MaxCreatedDate 
FROM 
    Articles a 
    INNER JOIN ArticlesMaxDate amd ON amd.IDCar = a.IDCar 
     AND amd.MaxCreatedDate = a.createddate 
+0

en utilisant les données de l'échantillon, cela renvoie 5 lignes, vous devez ajouter 'AND amd.MaxCreatedDate = a.createddate' à la jointure' ON' –

+0

@KM: merci! c'était une faute de frappe! –

Questions connexes