Я изо всех сил пытаюсь написать наиболее эффективный способ написания SQL-запросов, который исключает макс (день) для каждого человека.Я пытался where where day < max(day)
, но наша среда hadoop не позволяет этого.
По сути, цель состоит в том, чтобы выбрать кого-то, у кого был телефон того же типа, который переключился на одного и того же поставщика за последние 570 дней.
Есть предложения по table1
части запроса?
with table2 as
(select listener_id, device_id, max(day) day from
devicetable b
where vendor_id = 42
and category = 'something'
group by listener_id, device_id, day) -- max day for each person
,table1 as
(select listener_id, device_id, ROW_NUMBER () over (PARTITION BY listener_id, device_id order by day desc) rowno from
(select listener_id, device_id, day from devicetable
where vendor_id=42 and category = 'something'
group by listener_id, device_id, day)
where rowno <> 1)
insert into finaltable
select a.listener_id
from table1 a
left join
table2 b
on a.listener_id = b.listener_id
where datediff (a.day, b.day) <=570 and a.day <= b.day -- setting the difference
and a.device_id <> b.device_id
and b.listener_id is not null; ```