Тупой вопрос — как будто знал, но забыл. И не гуглится.
Есть несколько таблиц в джоине, в каждой таблице есть колонка LastModifiedDate.
В результирующем селекте надо выбрать из каждой таблицы нужные поля и для каждой строки взять наиболее позднюю дату изменения.
что-то вроде:
select t1.id, t1.name, t2.id, t2.name, latest(t1.last_modified_date, t2.last_modified_date) as last_modified_date
from tbl1 as t1
inner join tbl2 as t2 on t1.id=t2.t2_id
что за функцию надо заюзать вместо latest?
Здравствуйте, Neco, Вы писали:
N>Тупой вопрос — как будто знал, но забыл. И не гуглится.
N>Есть несколько таблиц в джоине, в каждой таблице есть колонка LastModifiedDate.
N>В результирующем селекте надо выбрать из каждой таблицы нужные поля и для каждой строки взять наиболее позднюю дату изменения.
N>что-то вроде:
N>N>select t1.id, t1.name, t2.id, t2.name, latest(t1.last_modified_date, t2.last_modified_date) as last_modified_date
N>from tbl1 as t1
N>inner join tbl2 as t2 on t1.id=t2.t2_id
N>
N>что за функцию надо заюзать вместо latest?
Фактически как я понимаю вам нужно взять максимальную дату из двух колонок для каждой записи. Готового функционала нет, но можно реализовать свой метод. Например:
-- Для 2005+
select t1.id, case when t1.data > t2.data then t1.data else t2.data end as data
from tbl1 as t1
join tbl2 as t2 on t1.id = t2.id
-- Для 2008+
select t1.id, (select max(data) from (values(t1.data), (t2.data)) as tt(data))
from tbl1 t1
join tbl2 t2 on t1.id = t2.id
-- Для 2012+ (по факту аналог case)
select t1.id, iif(t1.data > t2.data, t1.data, t2.data) data
from tbl1 as t1
join tbl2 as t2 on t1.id = t2.id
И конечно при сравнении необходимо добавить обработку null значений.
Здравствуйте, Neco, Вы писали:
N>....
N>что за функцию надо заюзать вместо latest?
Еще есть вариант с UNION ALL:
-- Для 2005+
select t1.id, (select max(data) from (select t1.data union all select t2.data) as tt(data))
from tbl1 t1
join tbl2 t2 on t1.id = t2.id
С использованием UNPIVOT, но не для всех задач:
-- Для 2005+
select id, max(data)
from
(
select t1.id, t1.data as data1, t2.data as data2
from tbl1 t1
join tbl2 t2 on t1.id = t2.id
) a
unpivot (data for val in (data1, data2)) as upvt
group by id
ох-ох-ох, у меня там таблиц десять по факту джойнятся — iif вообще не вариант.
с union даже получше будет.
Спасибо!