>in una tabella ho sostanzialmente due campi un campo nome ed
>uno data. La tabella viene compilata online e gli utenti inseriscono
>il nome, mentre la data si compila in automatico con date()
>Vorrei creare una query e applicare un filtro che mi faccia vedere
>solo gli utenti che hanno le due date più alte. Ad esempi se
>tre ut. hanno come data 12/01/2007 altri quattro il 18/01/2007
>ed altri otto il 04/05/2008 vorrei che si vedessero solo quelli
>con le due date più alte.
Supponiamo di avere la tabella Utenti così composta:
UtenteID Nome Data
--------- ---------- ------------
1 Lorenzo 12/01/2007
2 Luca 12/01/2007
3 Andrea 12/01/2007
4 Gianluca 18/01/2007
5 Davide 18/01/2007
6 Alessandro 18/01/2007
7 Germano 18/01/2007
8 David 04/05/2008
9 Massimo 04/05/2008
10 Matteo 04/05/2008
11 Marco 04/05/2008
12 Ester 04/05/2008
13 Elena 04/05/2008
14 Michela 04/05/2008
15 Barbara 04/05/2008
Come prima cosa vado a recuperare in modo distinto tutte le date presenti in tabella.
Di queste date andrò a considerare solo le due più recenti e le andrò a mettere in JOIN con la tabella Utenti per recuperare tutte le righe che soddisfano la condizione:
SELECT U.*
FROM Utenti AS U
INNER JOIN (
SELECT TOP 2 Data
FROM (
SELECT DISTINCT Data
FROM Utenti
) AS Q
ORDER BY Data DESC
) AS Q2
ON U.Data = Q2.Data;
Eseguendola otterrai:
UtenteID Nome Data
--------- ---------- ------------
15 Barbara 04/05/2008
14 Michela 04/05/2008
13 Elena 04/05/2008
12 Ester 04/05/2008
11 Marco 04/05/2008
10 Matteo 04/05/2008
9 Massimo 04/05/2008
8 David 04/05/2008
7 Germano 18/01/2007
6 Alessandro 18/01/2007
5 Davide 18/01/2007
4 Gianluca 18/01/2007
Se ti serve un ordinamento differente puoi specificare la clausola ORDER BY nella outer query più esterna.
>Ciao a tutti e.... grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org