Проблема SQL, потому что есть повторяющиеся строки - PullRequest
0 голосов
/ 16 октября 2018

доброе утро У меня есть следующий запрос:

SELECT DISTINCT c.cname                                              AS component,
                Sum(w.timeworked / 3600) OVER ()                     AS sum_tipo, 
                Sum(w.timeworked / 3600) OVER (partition BY c.cname) AS sum_by_component 

FROM            jira.jiraissue j, 
                jira.worklog w, 
                jira.project p, 
                jira.issuetype t, 
                jira.component c, 
                jira.nodeassociation na , 
                jira.cwd_user u

WHERE           w.issueid=j.id 
AND             j.project=p.id 
AND             na.source_node_id = j.id 
AND             na.source_node_entity = 'Issue' 
AND             na.sink_node_id=c.id 
AND             t.id=j.issuetype 
And             w.author= u.lower_user_name
AND             w.author in ( select distinct author from jira.worklog where author in (select distinct lower_user_name from jira.cwd_user where display_name in ('Ilanas ejemplo')))   
AND             p.pname=  'Area Económica'  
AND             t.pname= 'Peticion'
AND             w.startdate >='01/01/2018' 
AND             w.startdate <='17/10/2018'

Я убедился, что этот запрос разбалансирован в некоторых небольших данных.

После небольшого исследования таблиц я проверилследующее:

enter image description here

не должно быть строк с одинаковым source_node_id (это ошибка пользователя).Я хочу сделать в SQL другой или что-то похожее, что в случае наличия некоторой строки с одинаковым кодом учитывается только одна строка

1 Ответ

0 голосов
/ 16 октября 2018

Ваша проблема в том, что это невозможно сделать без каких-либо «компромиссов» в отношении данных.В вашей таблице это показывает, что у «дублирующихся строк» ​​разные раковины (10328 и 10320 или 10326 - неправильно видно число).

Если вы готовы пойти на «компромиссы», вот запрос - сАбсолютные минимальные изменения в вашем запросе - это компромисс, который при дублировании выбирает максимальный по значению адрес_удобия.

SELECT DISTINCT c.cname                                              AS component,
            Sum(w.timeworked / 3600) OVER ()                     AS sum_tipo, 
            Sum(w.timeworked / 3600) OVER (partition BY c.cname) AS sum_by_component 

 FROM            jira.jiraissue j, 
                 jira.worklog w, 
                 jira.project p, 
                 jira.issuetype t, 
                 jira.component c, 
                 (SELECT source_node_id, source_node_entity
                       ,max(sink_node_id) as sink_node_id
                    FROM jira.nodeassociation
                  GROUP BY source_node_id, source_node_entity) na, 
                 jira.cwd_user u

WHERE           w.issueid=j.id 
AND             j.project=p.id 
AND             na.source_node_id = j.id 
AND             na.source_node_entity = 'Issue' 
AND             na.sink_node_id=c.id 
AND             t.id=j.issuetype 
And             w.author= u.lower_user_name
AND             w.author in ( select distinct author 
                                from jira.worklog 
                               where author 
                                     in (select distinct lower_user_name 
                                          from jira.cwd_user 
                                         where display_name in ('Ilanas ejemplo')))   
AND             p.pname=  'Area Económica'  
AND             t.pname= 'Peticion'
AND             w.startdate >='01/01/2018' 
AND             w.startdate <='17/10/2018'

Но имейте в виду, что этот "трюк" может генерировать ложные данные.Но если вы спешите и не можете исправить ошибочный ввод данных пользователем, вы можете сравнить свой отчет с этим запросом с помощью агрегатной функции MIN и MAX и решить, достаточно ли он хорош или нет.

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