Oeratore max su oggetto data

venerdì 24 ottobre 2008 - 17.12

jampicoll Profilo | Junior Member

Ciao a tutti.
Ho il seguente problema.
In una tabella ci sono dei record che contengono due oggetti data.
Adesso in una query di selezione mi servirebbe lavorare con la data piu grande delle due in questo modo:
WHERE MAX((AGENDA.[Agenda Ultimo Aggiornamento]),([AGENDA].[Agenda Data]))>[Forms]![AGENDA]![Testo29];

Ma non funziona...Come mai???

lbenaglia Profilo | Guru

>Adesso in una query di selezione mi servirebbe lavorare con la
>data piu grande delle due in questo modo:
>WHERE MAX((AGENDA.[Agenda Ultimo Aggiornamento]),([AGENDA].[Agenda
>Data]))>[Forms]![AGENDA]![Testo29];
>
>Ma non funziona...Come mai???
Perché MAX() è una funzione di aggregazione, e quindi agisce sulle righe, non sulle colonne.
Potresti ricorrere alla funzione IIF() ma otterresti un piano di esecuzione pessimo.
Purtroppo con le poche info che hai dato è impossibile aiutarti.

Ciao!

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

jampicoll Profilo | Junior Member

NELLO STESSO RECORD CI SONO DUE DATE:
A)DATA INSERIMENTO
B)DATA ULTIMO AGGIORNAMENTO, CHE PUO ESSERE ANCHE VUOTO, MA QUANDO E' PRESENTE E' SICURAMENTE PIU GRANDE DELLA DATA INSERIMENTO.
QUINDI LA QUERY SULLA DATA DEVE ESSERE FATTA CON LA "DATA INSERIMENTO" QUANDO IL CAMPO "DATA ULTIMO AGGIORNAMENTO" E' VUOTO.
QUANDO INVECE E' PRESENTE IL CAMPO "DATA ULTIMO AGGIORNAMENTO" LA QUERY DEVE UTILIZZARE QUESTA DATA.

SE NON SONO STATO CHIARO CHIEDI PURE

lbenaglia Profilo | Guru

>SE NON SONO STATO CHIARO CHIEDI PURE
Tutto quello che hai scritto lo avevo capito.
Come ti ho detto, con la IIF() risolveresti, ma otterresti un pessimo query plan.
Non ci hai ancora spiegato la natura della query, la struttura della tabella, dati di prova, in modo da individuare (se possibile) soluzioni differenti che permettano di scrivere una o più query più efficienti.

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

jampicoll Profilo | Junior Member

In ogni record ci sono questi due campi
DATA INSERIMENTO
DATA ULTIMO AGGIORNAMENTO (quando presente è sempre maggiore della DATA INSERIMENTO).
Devo realizzare una query che mi permetta, inserendo in due campi due date di inizio e fine intervallo, di filtrare i dati per l'intervallo indicato.
Il confronto deve essere fatto sulla DATA INSERIMENTO se l'altra è NULLA
Altrimenti deve considerare DATA ULTIMO AGGIORNAMENTO che è la piu recente

lbenaglia Profilo | Guru

>In ogni record ci sono questi due campi
<SNIP>

Vedo che parliamo due lingue diverse.
Prova questa condizione di WHERE e se ti piace usala, ma non aspettarti prestazioni entusiasmanti:

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

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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