2010-06-25 14 views
5

Hey ragazzi, ho la seguente tabella strutturata in questo modo:query SQL, righe distinte necessario

row structure

Quindi, in pratica, come potete vedere, il reparto passa attraverso nome cambia ogni paio d'anni. Guarda il numero 16 per esempio. Voglio una query di selezione che otterrà il nome solo quando la data è la migliore. Come lo faccio?

+1

Quale motore di database? – Blorgbeard

+0

Access table, using access 2007 – masfenix

risposta

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

Grazie, ha funzionato magnificamente. – masfenix

0

Qual è la chiave primaria per questo tavolo? Questo fa un subquery la stessa tabella con un confronto di nomi.

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 per Alt. Soluzione. Il gruppo per ID mi ha gettato, ma in questo caso, è il campo di dati duplicati. – JeffO

0

SELEZIONA d. * FROM Dipartimenti d INNER JOIN (SELECT pk FROM Dipartimenti GROUP BY ID AVERE theDate = MAX (theDate)) m ON m.pk = d .pk DOVE [Nome] = "Reparto"

+0

Questo è meglio della risposta accettata perché ...? –

Problemi correlati