Sql 如何标记过去重复多次的id
我试图用过去6个月重复出现的特定条件标记员工id。我希望这样做的方式是创建一个新列,该列将使用我在查询中指定的条件标记这些员工Sql 如何标记过去重复多次的id,sql,postgresql,Sql,Postgresql,我试图用过去6个月重复出现的特定条件标记员工id。我希望这样做的方式是创建一个新列,该列将使用我在查询中指定的条件标记这些员工 Eeid Receiveddt Status Reason Past 6 months? 123 May19 closed OHM 1 234 Jan19 closed xyz 0 123 July19 closed OHM 1 567
Eeid Receiveddt Status Reason Past 6 months?
123 May19 closed OHM 1
234 Jan19 closed xyz 0
123 July19 closed OHM 1
567 Aug19 open ZZZ 0
123 Sept19 open OHM 0
现在,根据上面的示例,eeid 123被标记在“过去6个月”列下,因为接收日期在过去6个月内,状态为关闭(这是我的2个标记条件)
我正在考虑使用case语句,但不确定如何检查重复的“Eeid”这是您想要的吗
select t.*,
( received_date > current_date - interval '6 month' and status = 'closed' )::int
from t;
我对你的要求有不同的理解。我读到它的意思是,您希望更新“已关闭”行,其中另一个id相同的行也在6个月内关闭,在6个月内关闭。下面就是这么做的,我试图构建它以显示逐步的开发(它可能会有所减少,但这不会显示它的开发)。希望这对您有所帮助,并为您提供可供借鉴的技术
update t
set last_6mo_flag = 1
where last_6mo_flag = 0
and (id, received_date) in
(select id,received_date
from (select id, received_date, last_6mo
from ( select id, received_date
, ( coalesce((extract (days from (received_date + interval '6 months') - received_date)::integer) > abs(next_date - received_date),false)
or coalesce((extract (days from (received_date + interval '6 months') - received_date)::integer) > abs(prior_date- received_date),false)
) last_6mo
from (select id, received_date, status
, lag(t.received_date) over(partition by t.id order by t.id, t.received_date) next_date
, lead(t.received_date) over(partition by t.id order by t.id, t.received_date) prior_date
from t
where status = 'closed'
) s1
) s2
where last_6mo
) s3
);
我无法查看::之后的查询部分,我不知道它是否被截断,weird@KaranKashyap . . . 它只是
::int
。