Sql primo e ultimo

lunedì 09 luglio 2007 - 11.23

Lucifel Profilo | Junior Member

Ciao,

ho un problema con una query. Il risultato della query è una sequenza di record, ma a me serve estrarre solo il primo e l'ultimo, anche in query diverse.

La query è circa

SELECT *
FROM tbl
WHERE valore = 10
ORDER BY data

Sapendo che ho più record con lo stesso valore, ho più record estratti. Io devo prendere il primo e l'ultimo. Credevo funzionasse con:

SELECT FIRST *
...

e

SELECT LAST *

Ma non mi funziona.

Qualcuno sa come fare?

Grazie


Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

amelix Profilo | Expert

Che SQL usi?
Se usi access/MsSql puoi fare così:
SELECT TOP 1 * FROM tbl WHERE valore = 10 ORDER BY data
E, analogamente:
SELECT TOP 1 * FROM tbl WHERE valore = 10 ORDER BY data DESC

Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

Lucifel Profilo | Junior Member

ah già xke le query sono diverse...

uso MS Sql Server 2005


Posso comunque usare top?
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

amelix Profilo | Expert

Non ho capito cosa vuol dire "le query sono diverse"?

A.
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

Lucifel Profilo | Junior Member

intendevo che possono esserci differenze tra MySql e SQL Server.

Comunque
SELECT TOP 1 *

Mi prende il primo e per prendere l'ultimo?
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

amelix Profilo | Expert

Come nell'esempio, e banalmente, inverti l'ordine e prendi il primo.


Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

Lucifel Profilo | Junior Member

sarebbe bello, ma non lo posso fare... xke ho dei dati un po' particolari.

Mi spiego meglio.

La mia tabella contiene id, giorno, mese, anno, importo
e io devo estrarre il record con data minore e il record con data maggiore.

Se io ordino x giorno + mese + anno riesco a trovare quello minore? Uso

ORDER BY giorno, mese, anno

e

ORDER BY giorno, mese, anno DESC?

Grazie
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

amelix Profilo | Expert

Mmmmhhhh!!!!
In quel modo fai un po di casino!!!!
In tutte e due le direzioni!
Se ordini per giorno, mese, anno non avrai, molto probabilmente, il risultato richiesto.
Esempio: 15/01/2006 e 01/05/2006.

Devi metterli dal + significativo al meno significativo e la proprieta ASC(default)/DESC va impostata per ogni campo...

PS. Queste sono le basi di ogni sintassi SQL!!!
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

Lucifel Profilo | Junior Member

ok chiaro

Sei stato gentilissimo.

Grazie
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

amelix Profilo | Expert

Quando aggiungi ORDER BY puoi fare cosí:
SELECT * FROM T1 WHERE.... ORDER BY T1.Column1 ASC
Oppure così:

SELECT * FROM T1 WHERE.... ORDER BY T1.Column1

Il risultato è lo stesso.

Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

Lucifel Profilo | Junior Member

Grazie...

Avevo già trovato la risposta....

Pensavo che esistesse una proprietà ASC(deafult)/DESC che non conoscevo, invece intendevi

ORDER BY campo ASC
ORDER BY campo DESC

...

Sei stato gentilissimo...
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5