Prendere la data più grande tra due colonne smalldatetime di una tabel...

mercoledì 12 novembre 2008 - 13.31

trinity Profilo | Guru

Ciao,

ho questa tabella:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

io devo creare una select che mi restituisca il valore + grande tra le date delle due colonne ossia nel mio esempio 03-11-2008.

come posso fare?

Grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>Ciao,
>
>ho questa tabella:
>
>CREATE TABLE [dbo].[Archivio_mov_new](
> [IdDb] [bigint] IDENTITY(1,1) NOT NULL,
> [codalbergo] [int] NOT NULL,
> [codcomalbergo] [int] NOT NULL,
> [DataArrivo] [smalldatetime] NULL,
> [DataPartenza] [smalldatetime] NULL,
> CONSTRAINT [PK_Archivio_mov_new] PRIMARY KEY CLUSTERED

Che come sempre non è valida.
Hai provato ad eseguire quel comando?

>poi inserisco questi dati:
>
>Insert into archivio_mov_new (codalbergo,codcomalbergo,dataarrivo,datapartenza)
>Values('10','60038','2008-11-01','2008-11-03')

Che come sempre:

1) Metti gli apici quando non devi (ti ho già ripetuto 1 milione di volte che i data type numerici NON LI RICHIEDONO)
2) Metti i separatori nelle date quando ti ho già ripetuto 2 milioni di volte che devi usare il formato ANSI SQL 'YYYYMMDD' SENZA ALCUN SEPARATORE.

>io devo creare una select che mi restituisca il valore + grande
>tra le date delle due colonne ossia nel mio esempio 03-11-2008.
>
>come posso fare?
Con una banalissima CASE:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Grazie
Prego.

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

trinity Profilo | Guru

Scusa hai ragione


cmq il tuo codice funziona benissimo solo che così vengono restituite tutti i record con la data massima, io invece vorrei che mi restituisca un solo valore senza tanti record, a questo punto si può fare nella select che mi hai postato oppure debbo aggiungere un altro metodo?

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>Scusa hai ragione
Lo so.

>cmq il tuo codice funziona benissimo solo che così vengono restituite
>tutti i record con la data massima, io invece vorrei che mi restituisca
>un solo valore senza tanti record, a questo punto si può fare
>nella select che mi hai postato oppure debbo aggiungere un altro
>metodo?
USE tempdb; CREATE TABLE dbo.Archivio_mov_new( IdDb bigint IDENTITY NOT NULL PRIMARY KEY, codalbergo int NOT NULL, codcomalbergo int NOT NULL, DataArrivo smalldatetime NULL, DataPartenza smalldatetime NULL ); INSERT dbo.archivio_mov_new VALUES(10, 60038, '20081101','20081103'); INSERT dbo.archivio_mov_new VALUES(10, 60038, '20081110','20081112'); SELECT MAX(CASE WHEN DataArrivo >= DataPartenza THEN DataArrivo ELSE DataPartenza END) AS Data FROM dbo.Archivio_mov_new; /* Output: Data ----------------------- 2008-11-12 00:00:00 (1 row(s) affected) */ DROP TABLE dbo.Archivio_mov_new;

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

trinity Profilo | Guru

Grazie mille funziona tutto.

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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