В настоящее время я использую postgres, и есть эта оконная функция sql, которая используется для генерации времени прихода и ухода сотрудников на основе даты. Но это ошибочно.
CREATE OR REPLACE VIEW view_test
AS
SELECT row_number() OVER () AS id,
a.created_at::date AS created_at,
date_part('year'::text, a.created_at) AS year,
date_part('month'::text, a.created_at) AS month,
date_part('day'::text, a.created_at) AS day,
date_part('dow'::text, a.created_at) AS dow,
a.company_id,
a.employee_id,
e.employee_type,
array_agg(
CASE
WHEN a.activity_type = 1
THEN a.created_at::time(0)
ELSE NULL::time
END) AS time_in,
array_agg(
CASE
WHEN a.activity_type = 2
THEN a.created_at::time(0)
ELSE NULL::time
END) AS time_out
FROM attendance_table a
LEFT JOIN employee_table e ON e.id = a.employee_id
GROUP BY a.created_at, date_part('day'::text, a.created_at),
a.employee_id, a.company_id, e.employee_type
ORDER BY date_part('year'::text, a.created_at), date_part('month'::text, a.created_at),
date_part('day'::text, a.created_at), a.employee_id;
это сгенерирует этот результат
Я пытаюсь создать таким образом, где time_in и time_out объединены на основе created_at (date) и employee_id. Идея в том, чтобы для каждой даты я знал время прихода и ухода сотрудника. предостережение: {NULL} не должен появляться, если в массиве есть записи.
вид и поля данных, которыми я пытаюсь манипулировать
https://docs.google.com/spreadsheets/d/1hn3w0mnezrV6_f-fPAKPZHuqdDjBBc_ArcgeBmgblq4/edit?usp=sharing
Как я могу изменить представление sql функции Windows выше, чтобы time_in и time_out объединялись на основе created_at (date) и employee_id? (последний снимок экрана - это желаемый результат) предостережение: {NULL} не должен появляться, если в массиве есть записи.
ОБНОВЛЕНИЕ (очень близкий ответ, но не совсем решенный):
CREATE OR REPLACE VIEW view_group
as
SELECT
created_at,
year,
month,
day,
dow,
company_id,
employee_id,
array_agg(check_in) as time_in,
array_agg(check_out) as time_out
FROM
view_test, unnest(time_in) check_in, unnest(time_out) check_out
GROUP BY 1,2,3,4,5,6,7
он производит это:
удается объединить массив с помощью unnest. Но обратите внимание, что NULL все еще там. Как удалить NULL (но если ничего нет, должно быть NULL)? или что-то разумное и возможное.