-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMiniProject_queries.sql
More file actions
76 lines (57 loc) · 1.86 KB
/
MiniProject_queries.sql
File metadata and controls
76 lines (57 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
-- VIEW -- No. of skeins needed to complete each project
CREATE VIEW YarnSkeinsNeeded AS
SELECT py.project_id, p.project_name,
CEIL((py.total_meterage_needed - py.meterage_used) / y.meterage_per_skein) AS total_skeins_needed
FROM ProjectYarns py
JOIN Projects p ON py.project_id = p.project_id
JOIN Yarnstock y ON py.yarn_id = y.yarn_id;
-- GROUP BY -- Total meterage owned
SELECT Yarn_id, brand, name, SUM(meterage_per_skein * skeins_owned) AS TOTAL_METERAGE_OWNED
FROM YarnStock
GROUP BY Yarn_id
ORDER BY brand ASC;
-- STORED FUNCTION - HOW LONG A PROJECT TOOK TO COMPLETE--
DELIMITER //
CREATE FUNCTION CalculateProjectDuration(projectId VARCHAR(10))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE projectDuration INT;
SELECT DATEDIFF(NOW(), start_date) INTO projectDuration
FROM Projects
WHERE project_id = projectId;
RETURN projectDuration;
END //
DELIMITER ;
SELECT CalculateProjectDuration('P1') AS project_duration; -- ALTER FOR EACH COMPLETED PROJECT ID --
-- SUBQUERY --- -- Type of project 'JUMPERS' that are 'Complete', and no. of days taken to complete ---
SELECT project_id, project_name, SUM(DATEDIFF(completion_date, start_date)) AS Total_Days_to_Complete
FROM Projects
WHERE pattern_id IN (
SELECT
pattern_id
FROM
Patterns
WHERE
pattern_category = 'Jumper')
GROUP BY
project_id, project_name;
-- EVENT -- SCHEDULED TO UPDATE PROJECT STATUS --
SET GLOBAL event_scheduler = ON;
DELIMITER //
CREATE EVENT RecurringUpdateProjectStatus
ON SCHEDULE
EVERY 20 SECOND
DO
BEGIN
UPDATE Projects
SET status = 'Completed'
WHERE completion_date IS NOT NULL AND completion_date <= CURDATE();
UPDATE Projects
SET status = 'In-Progress'
WHERE completion_date IS NULL;
END //
DELIMITER
UPDATE Projects
SET completion_date = null
WHERE project_id = "P5";
select * from projects;