2016-10-24 6 views
3

私は数時間かかると予想される作業をしています。そして、消費された時間から推定された時間を差し引いた時間が費やされるべきである。推定時間から使用時間を差し引いた結果が間違っている - postgresql

Employeeテーブル

CREATE TABLE sign 
    (signid varchar(3), signname varchar(30));  
INSERT INTO sign 
    (signid, signname) 
VALUES 
    ('AA', 'Adam'), 
    ('BB', 'Bert'), 
    ('CC', 'Cecil'), 
    ('DD', 'David') 

タスクテーブル

CREATE TABLE task 
    (taskid int4, taskdate date, tasksign varchar(3), taskhr numeric(10,2)); 

INSERT INTO task 
    (taskid, taskdate, tasksign, taskhr) 
VALUES 
    (1,'2016-01-01','AA',10), 
    (2,'2016-02-01','BB',10), 
    (3,'2016-01-15','BB',10), 
    (4,'2016-03-01','BB',10), 
    (5,'2016-01-03','CC',10) 

タイムシートテーブル

CREATE TABLE hr 
    (hrid int4, hrsign varchar(3), hrtask int4, hrqty numeric(10,2)); 

INSERT INTO hr 
    (hrid, hrsign, hrtask, hrqty) 
VALUES 
    (1,'AA',1,1.1), 
    (2,'BB',2,1.2), 
    (3,'CC',5,2.3), 
    (4,'CC',5,5) 

予定時刻からの時間を費やした減算で単純なクエリを取得するために私の試みは間違った答えを与えます:

SELECT signid,signname,to_char(taskdate, 'iyyy-iw'),sum(taskhr),sum(hrqty) 
FROM  sign 
LEFT JOIN task ON tasksign=signid 
LEFT JOIN hr ON taskid=hrtask 
GROUP BY 1,2,3 
ORDER BY 2,3 

答えは次のとおりです。

id name week  task hr 
AA Adam 2015-53 10  1,1000 
BB Bert 2016-02 10  NULL 
BB Bert 2016-05 10  1,2000 
BB Bert 2016-09 10  NULL 
CC Cecil 2015-53 20  7,3000 
DD David NULL  NULL NULL 

作業時間が重複しているようです。それは次のようになります。

id name week  task hr 
AA Adam 2015-53 10  1,1000 
BB Bert 2016-02 10  NULL 
BB Bert 2016-05 10  1,2000 
BB Bert 2016-09 10  NULL 
CC Cecil 2015-53 10  7,3000 
DD David NULL  NULL NULL 

どれ先端どのように正しい計算するクエリを作成しますか? hrテーブルを結合

"フィドル"

http://rextester.com/UOO16020

答えて

2

taskテーブルの行を乗算します。参加前に集計hr

select signid, signname, to_char(taskdate, 'iyyy-iw'), sum(taskhr), sum(hrqty) 
from 
    sign 
    left join 
    task on tasksign = signid 
    left join (
     select hrtask, sum(hrqty) as hrqty 
     from hr 
     group by 1 
    ) 
    hr on taskid = hrtask 
group by 1,2,3 
order by 2,3 
; 
signid | signname | to_char | sum | sum 
--------+----------+---------+-------+------ 
AA  | Adam  | 2015-53 | 10.00 | 1.10 
BB  | Bert  | 2016-02 | 10.00 |  
BB  | Bert  | 2016-05 | 10.00 | 1.20 
BB  | Bert  | 2016-09 | 10.00 |  
CC  | Cecil | 2015-53 | 10.00 | 7.30 
DD  | David |   |  |  
+0

ありがとうございました!ターゲット上で右。 – sibert

関連する問題