Улей SQL - как убрать макс (дату) с каждого человека? - PullRequest
0 голосов
/ 26 февраля 2019

Я изо всех сил пытаюсь написать наиболее эффективный способ написания 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; ```

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Попробуйте что-то вроде этого:

SELECT listener_id, device_id, day FROM devicetable AS A LEFT OUTER JOIN (SELECT listener_id, Max(Day) AS MaxDate FROM devicetable GROUP BY listener_id) AS B ON A.listener_id=B.listener_id AND A.day=B.MaxDate WHERE B.listener_id IS NULL

Он вернет все строки, кроме строк с максимальной датой для каждого слушателя.

0 голосов
/ 26 февраля 2019

только первое предложение только для части вашего кода

Если вы хотите, чтобы максимальный день не упоминался, день в группе должен указываться

select listener_id, device_id, max(day) day 
from devicetable b
where vendor_id = 42
and category = 'something' 
group by listener_id, device_id

, относится ли он к столбцу базы данныхили относится к псевдониму макс

...