2009-09-24 2 views
0

Я пытаюсь получить значение null в столбце USAGE_START_DATE.SQL max и null

Пока что у меня есть уникальные максимальные записи тех, которые имеют значение в столбце USAGE START DATE, и не удалось найти записи с nulls в USAGE START DATE.

Я уже пробовал ISNULL, COALESCE, NVL, NZ.

У меня есть две таблицы: связанные с Reservation_id.

ReservationID Usage Start Date 
1    01/01/2001 00:00:00 
1    02/01/2001 00:00:00 
1    03/03/2001 00:00:00 
2    NULL 
2    NULL 

До сих пор с моим текущим кодом: Вот что я получил:

ReservationID Usage Start DAte 
1    03/03/2001 00:00:00 

Вот что я хочу:

ReservationID  Usage Start Date 
1     03/03/2001 00:00:00 
2 

Спасибо !!!

Чтобы упростить мой код:

SELECT distinct RENTAL_DETAILS_VW.RESERVATION_ID, 
RENTAL_DETAILS_VW.USAGE_START_DATE, 
FROM BYNXFLEET_BI.RENTAL_DETAILS_VW, WILLOW2K.RESERVATIONS 
WHERE RENTAL_DETAILS_VW.USAGE_START_DATE = (
select max(case when ors2.USAGE_START_DATE is null 
    then {ts ' 2009-01-01 00:00:00 ' } 
    else ors2.USAGE_START_DATE END) 
FROM RENTAL_DETAILS_VW ors2 
where ors2.RESERVATION_ID=RESERVATIONS.RESERVATION_ID) 
+6

Пожалуйста, вырежьте посторонние поля, чтобы создать минимальный тестовый пример. Большая часть этого не имеет значения для вашего вопроса, и я не ожидаю, чтобы пробраться через него. – outis

+1

Я не совсем уверен, о чем вы просите. Это также полезно, если вы могли бы включить некоторые примеры вывода - если это возможно, то, что вы на самом деле видите и что вы хотели бы видеть. Поскольку у нас нет вашей базы данных, мы не можем сказать, что она должна возвращать. – SqlRyan

+0

@khoa: Я обновил свой ответ тем, что, как я думаю, вы ищете. – SqlRyan

ответ

2

Вы не собираетесь, чтобы получить все строки, где USAGE_START_DATE является NULL, потому что вы фильтруя их - ИНЕКЕ в конце видит, что только строки, преследующих максимальная дата для соответствующего RESERVATION_ID включена. Вы пытаетесь включить NULL USAGE_START_DATE строки, даже если у них нет соответствующего резервирования?

UPDATE: Вам не нужен DISTINCT, и это может негативно повлиять на ваши результаты. Кроме того, поскольку вы хотите «Пустое» вместо NULL, вам нужно использовать ISNULL. Вам понадобится LEFT JOIN, и я также добавил некоторые псевдонимы таблиц, чтобы сделать их немного легче читать. Вот что вы хотите:

SELECT rd.RESERVATION_ID, 
     ISNULL(MAX(rd.USAGE_START_DATE), '') as START_DATE, 
    FROM BYNXFLEET_BI.RENTAL_DETAILS_VW rd 
    LEFT 
    JOIN WILLOW2K.RESERVATIONS r 
    ON rd.RESERVATION_ID = r.RESERVATION_ID