PDA

View Full Version : [SQL] First e Last


breiko
04-11-2005, 15:27
query SQL:
SELECT FIRST ( img ) AS I FROM blog LIMIT 0 , 30

Messaggio di MySQL: #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the
right syntax to use near '( img ) AS I from blog LIMIT 0, 30' at line 1


Dalla guida:
FIRST(column) Returns the value of the first record in a specified field (not supported in SQLServer2K)
LAST(column) Returns the value of the last record in a specified field (not supported in SQLServer2K)

Qualcuno mi aiuta a capire cosa non va?

PFed
04-11-2005, 16:06
Non c'è la GROUP BY.

First() e Last() sono funzioni di aggregazione.

ESEMPIO: ho tre record:

ID - NOME
1 - mario
2 - giuseppe
3 - mario


SELECT First(ID) FROM tabella GROUP BY NOME

restituisce

1 - Mario
2 - Giuseppe


Se invece avessi usato

SELECT Last(ID) FROM tabella GROUP BY NOME

3 - Mario
2 - Giuseppe


Infine

SELECT Sum(ID) FROM tabella GROUP BY NOME

4 - Mario
2 - Giuseppe


PS: Nota bene First() restituisce il primo record incontrato nel raggruppamento, indipendentemente dal suo ordine. Ad esempio se per qualche motivo, fisicamente il DBMS incontra prima l'id 4 e poi il 2, restituisce 4.
Min() invece restituisce il minimo ordinato.

Last() e Max() stesse considerazioni

cionci
04-11-2005, 17:40
Dalla guida:
FIRST(column) Returns the value of the first record in a specified field (not supported in SQLServer2K)
LAST(column) Returns the value of the last record in a specified field (not supported in SQLServer2K)

Qualcuno mi aiuta a capire cosa non va?
Che guida stai seguendo ? Non sarà mica per SQLServer ? In tal caso i due dialetti SQL non sono interscambiabili :)

breiko
04-11-2005, 18:05
Select Last(id) from blog group by user

tabella blog:

id 1 user pippo
id 2 user gianni
id 3 user gianni

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( id ) from blog group by user LIMIT 0, 30' at line 1

Anche prima usavo group by ma non l'avevo riportato perchè ho fatto copia e incolla e non mi sono accorto della mancanza.

Sto seguendo qua: http://dev.mysql.com/doc/mysql/en
Uso MySql di Aruba.

:help:

p.s. Questo funziona: Select max(id) from blog GROUP by user

cionci
04-11-2005, 18:14
Io sto parlando di quelle due righe ti ho quotato...dove hai trovato quelle definizioni ?

PFed
04-11-2005, 18:18
effettivamente "AS I" è una particolarità di SQL 2000, non so se MySql la supporta...

breiko
04-11-2005, 18:23
Io sto parlando di quelle due righe ti ho quotato...dove hai trovato quelle definizioni ?

google..

http://www.w3schools.com/sql/sql_functions.asp

PFed
04-11-2005, 18:36
google..

http://www.w3schools.com/sql/sql_functions.asp

Infatti se leggi bene, ti dice che sono specifiche di Access e di SQL Server!

Sicuramente MySQL non supporta Last()

breiko
04-11-2005, 18:40
Infatti se leggi bene, ti dice che sono specifiche di Access e di SQL Server!

Sicuramente MySQL non supporta Last()

:cry:
Mo come faccio? Mission impossible..

PFed
04-11-2005, 18:44
Ma che devi fare ????

breiko
05-11-2005, 12:18
tabella blog:
id 1 immagine A user Pippo
id 2 immagine B user Gianni
id 3 immagine C user Pippo


A me serve avere l'ultima Immagine inserita da Pippo.
Siccome la colonna immagine non ha un ordine non posso dire max(immagine) dovrei usare last(immagine).

Quindi:
SELECT user,max(id) as I,immagine FROM blog GROUP BY user ORDER BY I DESC

non mi seziona l'immagine C ma l'immagine A.
Precisamente:
Pippo 3 A (io voglio Pippo 3 C)

Dovrei quindi usare last(img) ma non funziona..

PFed
05-11-2005, 12:30
SELECT * FROM Blog INNER JOIN (SELECT Max(Id),User FROM blog GROUP BY User) AS Temp ON Blog.Id = Temp.Id

breiko
05-11-2005, 12:51
You have an error in your SQL syntax.

Sei sicuro di quel Select all'interno del JOIN?

Anzi del select all'interno del FROM che sembra non possa funzionare..