2013-05-21 15 views

risposta

11

È possibile utilizzare la clausola HAVING:

SELECT MAX(DT_LOGDATE) 
FROM   UMS_LOGENTRY_DTL 
WHERE  C_INPUTMODE='R' and VC_DEVICEID=10 
HAVING MAX(DT_LOGDATE) IS NOT NULL 
+0

È bello, non ci ho pensato. –

1

È possibile utilizzare la query come sottoquery e aggiungere un'altra condizione:

select max_date 
from 
(
    select MAX(DT_LOGDATE) max_date 
    from UMS_LOGENTRY_DTL 
    where C_INPUTMODE='R' and VC_DEVICEID=10 
) sub 
where sub.max_date is not null 
+0

Grazie. lavorato –

3

utilizzare una tabella derivata e filtro che:

select * 
from (
    select MAX(DT_LOGDATE) as max_date 
    from UMS_LOGENTRY_DTL 
    where C_INPUTMODE='R' 
    and VC_DEVICEID=10 
) t 
where max_date is not null 
+0

Grazie .. ha funzionato bene –

+0

Sono solo curioso, perché vuoi scrivere nella() invece di aggiungere l'istruzione where? –

+0

@ Y.Z .: perché non è possibile fare riferimento a un alias direttamente nella clausola 'where'. La tabella derivata è necessaria per motivi di sintassi. –

3

Gli aggregati scalari restituiscono sempre una singola riga anche se aggregano un set vuoto.

Si può anche fare

SELECT MAX(DT_LOGDATE) 
FROM UMS_LOGENTRY_DTL 
WHERE C_INPUTMODE = 'R' 
     AND VC_DEVICEID = 10 
GROUP BY() 

La clausola GROUP BY rende una fila vector aggregate rather than scalar e nessun NULL sarà restituita se non ci sono righe in UMS_LOGENTRY_DTL che corrispondono al WHERE.

Problemi correlati