如何仅给最大记录添加标签

时间:2019-04-02 05:31:22

标签: sql google-bigquery

我有如下数据,enter image description here

加入我公司的人将分配系统或笔记本电脑,分配工作也将在加入之前进行

我需要再添加一列“ Updated_flag”, 对于加入日期为“ system_assign_time”的人员,其标志值为“ Y”,对于“ system_assign_time”的最大值为“ Y”。

针对加入日期为时间的人

enter image description here

对于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。

请帮助我..!

谢谢

3 个答案:

答案 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”,因为它更合适