Interrogazione SQL con select

giovedì 18 dicembre 2008 - 11.19

schumy2000 Profilo | Junior Member

Salve ragazzi
LA cosa può essere banale ma mi sta facendo impazzire da stamane
Come faccio a dire selezionami SOLO il campo descrizione che ha il più alto identificativo?

Grazie
Ciao.
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

alx_81 Profilo | Guru

>Salve ragazzi
Ciao!

>LA cosa può essere banale ma mi sta facendo impazzire da stamane
>Come faccio a dire selezionami SOLO il campo descrizione che
>ha il più alto identificativo?
Puoi postare una CREATE TABLE della tua tabella? Così facciamo l'esempio sul tuo oggetto.
Magari allega anche qualche insert e il risultato che vuoi ottenere..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

schumy2000 Profilo | Junior Member

purtroppo la tabella non l'ho fatta io ed è aziendale quindi nn posso darla all'esterno...mi spiace

Ci vorrebbe una cosa del tipo select [Descrizione] con max(no).....
Qualche idea?
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

lbenaglia Profilo | Guru

>purtroppo la tabella non l'ho fatta io ed è aziendale quindi
>nn posso darla all'esterno...mi spiace
LOL

>Ci vorrebbe una cosa del tipo select [Descrizione] con max(no).....
>Qualche idea?
Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES (1, 'Lorenzo', 'Benaglia') , (2, 'Andrea', 'Montanari') , (3, 'Gianluca', 'Hotz'); WITH CTE_GetKey AS ( SELECT MAX(StudentID) AS StudentID FROM dbo.Students ) SELECT S.* FROM dbo.Students AS S JOIN CTE_GetKey AS CTE ON S.StudentID = CTE.StudentID; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 3 Gianluca Hotz (1 row(s) affected) */ DROP TABLE dbo.Students;

Come vedi nella Common Table Expression recupero l'ultimo ID e successivamente eseguirò una banale INNER JOIN tra la tabella base e la CTE utilizzando come clausola di JOIN la colonna StudentID.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

schumy2000 Profilo | Junior Member

credo di aver capito grazie dell'aiuto...
alla prox
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

sanbiz Profilo | Senior Member

>LA cosa può essere banale ma mi sta facendo impazzire da stamane
>Come faccio a dire selezionami SOLO il campo descrizione che
>ha il più alto identificativo?

Come prima cosa sarebbe buona norma postare le istruzioni per la creazione della tua tabella e qualche riga di codice, tanto per comprendere meglio il problema.
Se non ho capito male, forse ti buò bastare una cosa come questa?


[CODE_SQL]
set nocount on
use tempdb
create table MyTable
(
ID int,
Descrizione varchar(25)
)

-- Inserisco dei valori a caso
insert into myTable values(1, 'Prima descrizione')
insert into myTable values(4, 'Seconda descrizione')
insert into myTable values(9, 'Terza descrizione')
insert into myTable values(2, 'Quarta descrizione')
GO

select A.Descrizione
from myTable A
right join (
select
max(id) as ID
from Mytable
) as B on A.ID = B.ID
GO
/*output
Descrizione
-------------------------
Terza descrizione
*/


-- Utilizziamo le Common Table Ecpressions (solo SQL2005 o superiori)
with UltimaDesc(ID) as
(
select max(id) from MyTable
)
select
A.Descrizione
from MyTable as A
Join UltimaDesc as B on A.ID = B.ID

/*output
Descrizione
-------------------------
Terza descrizione
*/

-- Elimino la tabella temporanea
drop table myTable
[/CODE_SQL]
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

lbenaglia Profilo | Guru

>from myTable A
>right join (
...
>from MyTable as A
>Join UltimaDesc as B

Ciao Sandro,

Perché nel primo caso fai una RIGHT OUTER JOIN e nel secondo una INNER JOIN?
In questo caso è sufficiente una INNER dato che la tabella derivata o la CTE restituiranno sempre un ID esistente nella tabella base

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

sanbiz Profilo | Senior Member

>Perché nel primo caso fai una RIGHT OUTER JOIN e nel secondo
>una INNER JOIN?
>In questo caso è sufficiente una INNER dato che la tabella derivata
>o la CTE restituiranno sempre un ID esistente nella tabella base
>
Verissimo. Grazie della precisazione.

Mi sto decisamente "arrugginendo"... ultimamente mi ritrovo con il solo notepad per scrivere.... Ah bei tempi passati....

>Ciao!
Ciao e grazie ancora.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

schumy2000 Profilo | Junior Member

Ho risolto così:

select descrizione
from my_table
where identificativo =
(select max(identificativo) from my_table where [filtri])
Ciao.
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein
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