Как получить выходной столбец, используя SQL-запрос на основе логики - PullRequest
0 голосов
/ 19 декабря 2018
Date              id    output     
11/26/2018 12:24   A    1    
12/10/2018 23:34   A    0    
12/11/2018 16:03   A    0   
12/11/2018 16:34   A    0    
12/12/2018 9:58    A    0    
12/13/2018 9:27    A    1    
12/6/2018 8:48     B    1    
12/26/2018 8:49    B    1

Я пытаюсь создать новый столбец, который имеет значение 1 или 0 на основе логики.

  1. Для каждого уникального значения id, если разница максимального значения составляетдата и минимальное значение даты> 15 дней - вывод 1 1 0
  2. еще, если разница дат составляет <15 дней и id имеет счетчик (id)> 1 - вывод 0 0 1 1 1007*
  3. последняя строка для каждого уникального идентификатора - выходные данные должны быть всегда 1

Я пытаюсь реализовать логику в запросе SQL, чтобы столбец вывода был 1 или 0 на основе логики,Кто-нибудь может мне помочь.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Этот запрос должен делать:

with
x as (
  select
    id,
    min(date) as mind,
    max(date) as maxd,
    count(*) as cnt
  from my_table
  group by id
),
select
  t.date, 
  t.id,
  case
    when t.date = x.maxd then 1 
    when datediff('day', x.mind, x.maxd) > 15 then 1
    when x.cnt <= 1 then 1
    else 0 end as output
from my_table t
join x on x.id = t.id
0 голосов
/ 19 декабря 2018

Это должно соответствовать вашим условиям:

select t.*,
       ( (seqnum = 1) or
         (max_date > min_date + interval '15 day')
       )::int as flag
from (select t.*,
             row_number() over (partition by id order by date desc) as seqnum,
             max(date) over (partition by id) as max_date,
             min(date) over (partition by id) as min_date
      from t
     ) t;

Ваше второе условие избыточно с последним условием.Если число равно 1, то запись является последней записью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...