2010-06-25 9 views
5

Hé les gars, j'ai le tableau suivant structuré comme suit:requête SQL, lignes distinctes nécessaires

row structure

Donc, fondamentalement, comme vous pouvez le voir, le département passe par nom change tous les deux ans. Regardez le numéro 16 par exemple. Je veux une requête de sélection qui obtiendra seulement le nom quand la date est la plus grande. Comment je fais ça?

+1

Quel moteur de base de données? – Blorgbeard

+0

Access table, using access 2007 – masfenix

Répondre

5
select ID, Name from departments o 
where o.thedate= 
    (select max(i.thedate) from departments i where o.id=i.id) 
+0

Merci, travaillé magnifiquement. – masfenix

0

Quelle est la clé primaire pour cette table? Cela fait une sous-requête la même table avec une comparaison de nom.

SELECT 
    id, 
    name, 
    date 
FROM table 
WHERE name = (SELECT TOP 1 name 
       FROM table AS subtable 
       WHERE subtable.name = table.name 
       ORDER BY date DESC) 
1
SELECT ID, 
First(Name) AS FirstOfName, First(DateChange) AS FirstOfDateChange 
FROM departments 
GROUP BY ID 
ORDER BY First(DateChange) DESC; 
+0

+1 pour Alt. Solution. Le groupe par ID m'a jeté, mais dans ce cas, c'est le champ de données en double. – JeffO

0

SELECT d. * FROM Departments D INNER JOIN (SELECT pk à partir de départements GROUP BY ID AYANT theDate = MAX (theDate)) m ON m.pk = d .pk O WH [Nom] = "Département"

+0

C'est mieux que la réponse acceptée parce que ...? –