Как остановить дублирование данных при использовании большой логики safe_divide запроса для манипулирования данными? - PullRequest
0 голосов
/ 02 июля 2019

Моя проблема в том, что я начинаю получать дублирование данных после добавления некоторой логики (safe_divide) в свой большой запрос # стандартный оператор SQL? Эта проблема возникает только после того, как я добавлю в этой строке

SAFE_DIVIDE( u.weekly_capacity/25200, 1) AS TargetDailyHours

Если я не решу это, мне, возможно, придется написать всю логику в студии данных, так как текущий рабочий процесс - Harvest -> Stitch-> Bigquery-> data studio

В этом запросе я использую левое объединение таблицы time_entires для MAX (updated_at) или самой последней записи времени для полного объединения таблицы users, где пользователь в данный момент активен. Я хочу на самом деле манипулировать данными, чтобы я мог найти FTE фактических рабочих часов / weekly_capacity. Но каждый раз, когда я пишу логику или большие функции запросов, я получаю дубликаты в результатах?


SELECT DISTINCT outer_e.hours, outer_e.id, outer_e.updated_at, 
                outer_e.spent_date, outer_e.created_at, 
                outer_e.client_id, outer_e.user_id AS harvest_userid,
                u.is_admin, u.first_name, u.is_active, u.id AS user_id, 
                u.weekly_capacity,
                client.name as names,

--SAFE_DIVIDE( u.weekly_capacity /25200, 1) AS TargetDailyHours

FROM
  (SELECT  e.id, MAX(e.updated_at) AS updated_at FROM `harvest-experiment.harvest.time_entries` AS e   
  GROUP BY e.id LIMIT 1000
  ) AS inner_e

LEFT JOIN `harvest-experiment.harvest.time_entries` AS outer_e
ON inner_e.id = outer_e.id AND inner_e.updated_at = outer_e.updated_at
FULL JOIN ( SELECT DISTINCT id, first_name, weekly_capacity, is_active, is_admin FROM `harvest-experiment.harvest.users`WHERE is_active = true
) AS u
ON outer_e.user_id = u.id  

JOIN (SELECT DISTINCT id , 
         name FROM `harvest-experiment.harvest.clients`) AS client
ON outer_e.client_id = client.id 



В столбце «Емкость за неделю в результатах» начнут отображаться люди с разными номерами за неделю, например:

Row hours   id  updated_at  spent_date  created_at  client_id   harvest_userid  is_admin    first_name  is_active   user_id weekly_capacity TargetDailyHours    

1   
0.22
995005338
2019-05-07 15:14:13 UTC
2019-04-29 00:00:00 UTC
2019-04-29 15:30:40 UTC
6864491
2622223
false
Nolan
true
2622223
72000
2.857142857142857


2   
0.22
995005338
2019-05-07 15:14:13 UTC
2019-04-29 00:00:00 UTC
2019-04-29 15:30:40 UTC
6864491
2622223
false
Nolan
true
2622223
129600
5.142857142857143


В этом случае пользователь Nolan отобразит двухкратные записи с порядковым номером 995005338 с 0,22 часами, а число weekly_capacity изменится с 129600 в ROW: от 2 до 72000 в ROW: 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...