#sql #google-bigquery
#sql #google-bigquery
Вопрос:
У меня есть данные, как показано ниже,
Люди, которые присоединились к моей компании, будут назначаться с системой или ноутбуком, назначение также произойдет до присоединения
Мне нужно добавить еще один столбец «Updated_flag», который имеет значение флага «Y» для пользователей, чье joining_date_time> system_assign_time и это «Y» для максимального значения system_assign_time.
Для людей, чье присоединение_date_time
для 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 изменений нет, потому что joining_date_time меньше, чем system_assign_time.
Пожалуйста, помогите мне в этом ..!
Спасибо
Ответ №1:
используйте скалярный подзапрос с 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. Где joining_date_time> system_assign_time, для тех записей, которым требуется изменить статус флага только для других записей, это должен быть старый статус
Ответ №2:
Я думаю, вы можете использовать здесь функцию 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
ПРИМЕЧАНИЕ: вместо ‘y’ и ‘n’ используется логическое значение, потому что это более уместно
Ответ №3:
Вы могли бы использовать объединение в группу максимального времени по 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
Комментарии:
1. Где joining_date_time> system_assign_time, для тех записей, которым требуется изменить статус флага только для других записей, это должен быть старый статус
2. обновлен ответ @kalyan4uonly .. со старым флагом для других значений