Получить максимум двух дат из двух разных таблиц в терадате - сценарий? - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть две таблицы table1 и table2. Таблица2 имеет меньшее количество строк, чем таблица1. В этих двух таблицах есть два столбца даты caldate1 в таблице1 и caldate2 в таблице2. Так что теперь мне нужно объединить эти две таблицы, получить максимум двух столбцов даты и сохранить их в новой таблице. Но если мы внутренне объединяем эти две таблицы, то строки table1, которых нет в table2, не попадут в финальную таблицу. Итак, нам нужна какая-то вещь, как

table1 
left outer join
table2

Но есть ситуация, когда две даты имеют нулевые значения. Так могу ли я использовать объединение, чтобы получить правильные данные в следующих сценариях ..

1. строка в table1 отсутствует в table2 -> тогда caldate1 в table1 должен перейти в финальную таблицу.

2. строка в таблице1 есть в таблице2, а значения caldate1 таблицы1 и caldate2 таблицы2 равны нулю -> тогда значение null должно войти в столбец даты окончательной таблицы

3. строка в таблице1 есть в таблице2, а caldate1 не равен нулю, а caldate2 равен нулю -> тогда caldate1 должен войти в финальную таблицу.

4. строка в table1 есть в table2, а caldate1 равен нулю, а caldate2 не равен нулю -> тогда caldate2 должен войти в финальную таблицу

5. строка в table1 есть в table2, а caldate1 больше, чем caldate2 -> caldate1 должен войти в финальную таблицу

6. строка в table1 есть в table2, а caldate2 больше, чем caldate1 -> caldate2 должен войти в финальную таблицу

Нам не нужно рассматривать строки в table2, которые не совпадают с table1. Поэтому в основном мне нужны все строки таблицы table1 с последним значением caldate, если в обеих таблицах есть конкретная строка. Заранее спасибо. Я не могу получить правильную функцию, чтобы сделать это. Это слияние?

Ответы [ 2 ]

1 голос
/ 28 мая 2012

Из приведенного выше запроса, если какое-либо число присутствует в table2 , а не в table1 , эти записи будут отброшены. Вы можете использовать полное внешнее объединение в вышеуказанном запросе.

ИЛИ См. Ниже запрос будет охватывать этот сценарий также.

sel number,max(date1) from (
  sel number,max(caldate1) as date1
    from table1
  union
  sel number,max(caldate2) as date1
    from table2
)tmp ;
0 голосов
/ 22 января 2010

Я думаю сделать что-то вроде ниже, чтобы удовлетворить мое требование.

SELECT 
a.number,
CASE WHEN ZEROIFNULL(a.caldate1) > ZEROIFNULL(b.caldate2)
THEN a.caldate1  -- This is working
ELSE
b.caldate2
END AS caldate
/*COALESCE (a.caldate1,caldate2) AS caldate*/ -- This is not giving max of dates
FROM 
table1  a
LEFT OUTER JOIN
table2  b
ON
a.number = b.number

Спасибо за помощь. Теперь это сделано вышеупомянутым методом.

...