CREATE TABLE Operation
(`Operationuid` varchar(3), `operationname` varchar(10), `owner` varchar(55))
;
INSERT INTO operation
(`Operationuid`, `operationname`, `owner`)
VALUES
('AA1', 'Cow', 'Jon Letoy'),
('AA2', 'Chicken', 'Ridikill' ),
('AA3', 'Snake', 'Mighty'),
('AA4', 'Sheep', 'The great'),
('AA5', 'Pig', 'Peon');
CREATE TABLE Activity
(`Operationuid` varchar(3), `DailyUID` varchar(10), `ActivityUID` varchar(55), `Class` varchar(3), `Phase` varchar(3), `Ops` varchar(3), `Root` varchar(3), Duration int);
INSERT INTO Activity
(`Operationuid`, `DailyUID`, `ActivityUID`, `Class`, `Phase`, `Ops`, `Root`, `Duration`)
VALUES
('AA1', 'DD1', 'AC1', 'TS', 'SS1', 'OP1', null, 12),
('AA1', 'DD1', 'AC2', 'TS', 'SS1', 'OP1', null, 2),
('AA1', 'DD1', 'AC3', 'TS', 'ST2', 'OP2', 'RR1', 3),
('AA1', 'DD2', 'AC4', 'P', 'ST2', 'OP3', null, 5),
('AA1', 'DD2', 'AC5', 'P', 'IH1', 'OP4', 'RR2', 1),
('AA1', 'DD2', 'AC6', 'U', 'IH1', 'OP5', null, 6.6),
('AA1', 'DD3', 'AC7', 'TS', 'IH2', 'OP6', null, 6),
('AA1', 'DD3', 'AC8', 'TU', 'SC1', 'OP7', null, 7),
('AA1', 'DD3', 'AC9', 'P', 'SC2', 'OP8', null, 8);
CREATE TABLE Daily
(`Operationuid` varchar(3), `DailyUID` varchar(10), `Dayno` varchar(55), `Daycost` decimal);
INSERT INTO Daily
(`Operationuid`, `DailyUID`, `Dayno`, `Daycost`)
VALUES
('AA1', 'DD1', 1, 1000),
('AA1', 'DD2', 2, 2000),
('AA1', 'DD3', 3, 3000),
('AA1', 'DD4', 4, 4000),
('AA1', 'DD5', 5, 5000);
select ap.phase,
(ap.duration / ad.duration) * daycost as cost
from (SELECT d.dailyUid, sum(daycost) as daycost
FROM Daily d
GROUP BY d.dailyuid
) d INNER JOIN
(Select a.dailyuid, sum(a.duration) as duration
from activity a
group by dailyUID
) ad
on ad.dailyuid = d.dailyuid join
(select a.dailyuid, a.phase, sum(a.duration) as duration
from activity a
group by a.dailyuid, a.phase
) ap
on ad.dailyuid = ap.dailyuid
group by phase
Variation to bring in Class column and dailynumber
select activity.class, daily.dayno, ap.phase,
(ap.duration / ad.duration) * daily.daycost as cost
from activity, daily, (SELECT d.dailyUid, sum(daycost) as daycost
FROM Daily d
GROUP BY d.dailyuid
) d INNER JOIN
(Select a.dailyuid, sum(a.duration) as duration
from activity a
group by dailyUID
) ad
on ad.dailyuid = d.dailyuid join
(select a.dailyuid, a.phase, sum(a.duration) as duration
from activity a
group by a.dailyuid, a.phase
) ap
on ad.dailyuid = ap.dailyuid
group by class, phase
Correct variation to include class columns into the query output http://sqlfiddle.com/#!9/6cda87/15
select ap.class, ap.phase,
(ap.duration / ad.duration) * daycost as cost
from (SELECT d.dailyUid, sum(daycost) as daycost
FROM Daily d
GROUP BY d.dailyuid
) d INNER JOIN
(Select a.class, a.dailyuid, sum(a.duration) as duration
from activity a
group by dailyUID
) ad
on ad.dailyuid = d.dailyuid join
(select a.class, a.dailyuid, a.phase, sum(a.duration) as duration
from activity a
group by a.dailyuid, a.phase
) ap
on ad.dailyuid = ap.dailyuid
group by ap.class, phase
To include day number into the column http://sqlfiddle.com/#!9/6cda87/20
select d.Dayno, ap.class, ap.phase,
(ap.duration / ad.duration) * daycost as cost
from (SELECT d.dayno,d.dailyUid, sum(daycost) as daycost
FROM Daily d
GROUP BY d.dailyuid
) d INNER JOIN
(Select a.class, a.dailyuid, sum(a.duration) as duration
from activity a
group by dailyUID
) ad
on ad.dailyuid = d.dailyuid join
(select a.class, a.dailyuid, a.phase, sum(a.duration) as duration
from activity a
group by a.dailyuid, a.phase
) ap
on ad.dailyuid = ap.dailyuid
group by d.dayno, ap.class, phase
http://sqlfiddle.com/#!9/cc30cc/8
select operation.operationname, ap.phase,
(ap.duration / ad.duration) * daycost as cost
from operation INNER JOIN (SELECT d.dailyUid, sum(daycost) as daycost
FROM Daily d
GROUP BY d.dailyuid
) d INNER JOIN
(Select a.dailyuid, sum(a.duration) as duration
from activity a
group by dailyUID
) ad
on ad.dailyuid = d.dailyuid join
(select a.dailyuid, a.phase, sum(a.duration) as duration
from activity a
group by a.dailyuid, a.phase
) ap
on ad.dailyuid = ap.dailyuid
group by phase
Adding operationname from the Operation table into the query output
No comments:
Post a Comment