#sql #amazon-redshift
#sql #amazon-redshift
Вопрос:
У меня есть три таблицы, как показано ниже:
1. kit_test tk
tk.id tk.first_name tk.last_name tk.dob tk.registered_dt
SD007 Aarushi Sharma 2/23/1987 10/5/2020
SD008 Camden Howard 8/22/1993 10/6/2020
2. employee_badged emp
emp.firstname emp.lastname emp.ssno emp.empid
Aarushi Sharma 5175 570
Camden Howard 23513 804
3. event_badged события
events.empid events.event_time_utc
570 10/5/2020
570 10/6/2020
570 10/7/2020
570 10/8/2020
804 10/15/2020
804 10/16/2020
Это мой желаемый результат.
regname firstname lastname registered_date enterdate count
Aarushi Sharma Aarushi Sharma 10/5/2020 10/5/2020 1
Aarushi Sharma Aarushi Sharma 10/5/2020 10/6/2020 1
Aarushi Sharma Aarushi Sharma 10/5/2020 10/7/2020 1
Aarushi Sharma Aarushi Sharma 10/5/2020 10/8/2020 1
Aarushi Sharma Aarushi Sharma 10/5/2020 10/9/2020
Aarushi Sharma Aarushi Sharma 10/5/2020 10/10/2020
Camden Howard Camden Howard 10/6/2020
Это запрос, который у меня есть до сих пор:
select distinct tk.first_name ' ' tk.last_name as "regname", EMP.FIRSTNAME, EMP.LASTNAME,
trunc(tk.registered_dt) as registered_date,
trunc(EVENTS.EVENT_TIME_UTC) as enterdate
FROM kit_test as tk
left join employee_badged emp
ON tk.first_name ' ' tk.last_name=emp.FIRSTNAME ' ' emp.LASTNAME
left join event_badged events
ON EVENTS.EMPID=EMP.ID
where
date(tk.registered_dt) between '2020-10-05' and '2020-10-10'
and (trunc(EVENTS.EVENT_TIME_UTC) between '2020-10-05' and '2020-10-10') ;
Я выполняю эту задачу в RedShift / Dbeaver / PostgreSQL.
Комментарии:
1. Большинству людей здесь нужны образцы табличных данных и ожидаемый результат в виде форматированного текста, а не в виде изображений.
2. Похоже, у вас уже был какой-то черновик SQL-запроса, почему бы вам не поделиться им?
3. Не могли бы вы, пожалуйста, разобраться в этом сейчас, @jarlh
4. Не могли бы вы, пожалуйста, разобраться в этом сейчас, @AlexLarionov
Ответ №1:
Я считаю, что вам следует СНАЧАЛА слева объединить 2 таблицы событий, ЗАТЕМ слева присоединиться к проверенным сотрудникам с помощью подзапроса результатов.
что-то вроде этого (я не могу это проверить, поэтому, возможно, в этом запросе можно внести некоторые исправления)
select distinct tk.first_name ' ' tk.last_name as "regname", emp_events.FIRSTNAME, emp_events.LASTNAME,
trunc(tk.registered_dt) as registered_date,
trunc(emp_events.EVENT_TIME_UTC) as enterdate
FROM kit_test as tk
left join (
select emp_badges.firstname, emp_badges.lastname events.event_time_utc
from employee_badged emp_badges
left join event_badged events
ON EMP_badges.ID=EVENTS.EMPID
where
(trunc(EVENTS.EVENT_TIME_UTC) between '2020-10-05' and '2020-10-10')
) emp_events
ON tk.first_name ' ' tk.last_name=emp_events.FIRSTNAME ' ' emp_events.LASTNAME
where
date(tk.registered_dt) between '2020-10-05' and '2020-10-10';
Возможно, вы не можете этого сделать, но добавление employee_id в таблицу kit_test значительно улучшит дизайн таблицы и запроса