加入我公司的人将分配系统或笔记本电脑,分配工作也将在加入之前进行
我需要再添加一列“ Updated_flag”, 对于加入日期为“ system_assign_time”的人员,其标志值为“ Y”,对于“ system_assign_time”的最大值为“ Y”。
针对加入日期为时间的人
对于Empid 101-> max(system_assign_time)为“ 2019-03-21 13:21:05 UTC”,因此该记录的更新标志为“ Y”。
对于Empid 102-> max(system_assign_time)为“ 2018-0722 14:31:14 UTC”,因此该记录的updated_flag为“ Y”
对于103没有变化,因为join_date_time小于system_assign_time。
请帮助我..!
谢谢
答案 0 :(得分:0)
对CASE WHEN Expression
使用标量子查询
select *,
case when system_assign_time=(select max(system_assign_time)
from tablename b where a.empid=b.empid ) then 'Y' else 'N' end as updated_flag
from tablename a
答案 1 :(得分:0)
您可以通过empid使用最大时间组上的加入
select a.empid, a.joining_date_time, a.system_assign_time, a.flag
, case when b.max_time = a.System_assign_time THEN 'Y' ELSE a.flag END update_flag
from my_table a
inner join (
select empid, max(System_assign_time) max_time
from my_table
group by empid
) on a.empid = b.empid
答案 2 :(得分:0)
我认为您可以在此处使用 over()函数...
SELECT *,
CASE WHEN joining_date_time>system_assign_time THEN
RANK() OVER (PARTITION BY emp_id ORDER BY system_assign_time DESC)
ELSE 2
END =1 AS flag
FROM tablename
NB:使用布尔值代替“ y”和“ n”,因为它更合适