Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Tworzenie tabeli urządzeń OZE
- CREATE TABLE Renewable_Energy_Devices (
- device_id NVARCHAR(26) PRIMARY KEY,
- device_status INT CHECK (device_status >= 0 AND device_status <= 6),
- device_power DECIMAL(18,0),
- company_id INT
- );
- -- Wstawianie danych do tabeli urządzeń OZE
- INSERT INTO Renewable_Energy_Devices (device_id, device_status, device_power, company_id)
- VALUES
- ('00000000000000000000000000',0, 1000,1),
- ('00000000000000000000000001',0, 1000,1),
- ('00000000000000000000000002',0, 1000,1),
- ('00000000000000000000000003',0, 2000,1),
- ('00000000000000000000000004',0, 1000,1),
- ('00000000000000000000000005',0, 1000,1),
- ('00000000000000000000000006',0, 1000,1),
- ('00000000000000000000000007',3, 1000,1),
- ('00000000000000000000000008',0, 5000,1),
- ('00000000000000000000000009',0, 1000,1),
- ('00000000000000000000000010',0, 1000,1),
- ('00000000000000000000000011',0, 1000,1),
- ('00000000000000000000000012',0, 1000,1),
- ('00000000000000000000000013',0, 1000,1),
- ('00000000000000000000000014',0, 1000,1),
- ('00000000000000000000000015',2, 4000,1),
- ('00000000000000000000000016',1, 1000,1),
- ('00000000000000000000000017',0, 1000,1),
- ('00000000000000000000000018',0, 1000,1),
- ('00000000000000000000000019',0, 1000,1),
- ('00000000000000000000000020',0, 7000,1),
- ('00000000000000000000000021',0, 1000,1),
- ('00000000000000000000000022',0, 1000,1),
- ('00000000000000000000000023',0, 1000,1),
- ('00000000000000000000000024',0, 1000,1),
- ('00000000000000000000000025',0, 1000,1),
- ('00000000000000000000000026',0, 1000,1),
- ('00000000000000000000000027',0, 1000,1),
- ('00000000000000000000000028',0, 1000,1),
- ('00000000000000000000000029',0, 1000,1),
- ('00000000000000000000000030',0, 1000,1),
- ('00000000000000000000000031',0, 8000,1),
- ('00000000000000000000000032',0, 1000,1),
- ('00000000000000000000000033',0, 1000,1),
- ('00000000000000000000000034',0, 1000,1),
- ('00000000000000000000000035',0, 1000,1),
- ('00000000000000000000000036',0, 1000,1),
- ('00000000000000000000000037',0, 1000,1),
- ('00000000000000000000000038',0, 1000,1),
- ('00000000000000000000000039',0, 1000,1),
- ('00000000000000000000000040',0, 1000,1),
- ('00000000000000000000000041',0, 1000,1),
- ('00000000000000000000000042',0, 1000,1),
- ('00000000000000000000000043',0, 1000,1),
- ('00000000000000000000000044',0, 1000,1),
- ('00000000000000000000000045',0, 1000,1),
- ('00000000000000000000000046',0, 9000,1),
- ('00000000000000000000000047',0, 1000,1),
- ('00000000000000000000000048',0, 1000,1),
- ('00000000000000000000000049',0, 1000,1),
- ('00000000000000000000000050',3, 7000,1);
- -- Tworzenie tabeli zgłoszeń awarii
- CREATE TABLE Device_Failures (
- failure_id INT PRIMARY KEY IDENTITY,
- device_id NVARCHAR(26),
- shift_number INT,
- failure_start DATETIME,
- failure_end DATETIME,
- FOREIGN KEY (device_id) REFERENCES Renewable_Energy_Devices(device_id)
- );
- -- Wstawianie danych do tabeli zgłoszeń awarii
- DECLARE @i INT = 0
- WHILE @i <= 9
- BEGIN
- INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
- VALUES (CONCAT('0000000000000000000000000', @i), round(rand() * 2 + 1,0,0), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
- SET @i = @i + 1
- END
- DECLARE @j INT = 10
- WHILE @j <= 50
- BEGIN
- INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
- VALUES (CONCAT('000000000000000000000000', @j), round(rand() * 2 + 1,0,0), DATEADD(DAY, -@j, GETDATE()), DATEADD(DAY, -@j+1, GETDATE()));
- SET @j = @j + 1
- END
- -- Tworzenie tabeli klientów
- CREATE TABLE Customers (
- customer_id INT PRIMARY KEY,
- name VARCHAR(255),
- email VARCHAR(255),
- phone VARCHAR(20),
- address VARCHAR(255)
- );
- -- Wstawianie danych do tabeli klientów
- INSERT INTO Customers (customer_id, name, email, phone, address)
- VALUES
- INSERT INTO Customers (customer_id, name, email, phone, address)
- -- Tworzenie tabeli zamówień
- CREATE TABLE Customers_Orders (
- customer_order_id INT PRIMARY KEY,
- customer_id INT,
- customer_order_date_start DATETIME,
- customer_order_date_end DATETIME,
- customer_order_amount_of_energy DECIMAL(18,0),
- FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
- );
- -- Wstawianie danych do tabeli zamówień
- INSERT INTO Customers_Orders (customer_order_id, customer_id, customer_order_date_start, customer_order_date_end, customer_order_amount_of_energy)
- VALUES
- (1, 1, '2024-04-01 08:00:00', '2024-04-01 12:00:00', 100),
- (2, 1, '2024-04-02 10:00:00', '2024-04-02 14:00:00', 120),
- (3, 2, '2024-04-03 12:00:00', '2024-04-03 16:00:00', 150),
- (4, 2, '2024-04-04 09:00:00', '2024-04-04 13:00:00', 130),
- (5, 3, '2024-04-05 11:00:00', '2024-04-05 15:00:00', 110),
- (6, 3, '2024-04-06 08:00:00', '2024-04-06 12:00:00', 140),
- (7, 4, '2024-04-07 10:00:00', '2024-04-07 14:00:00', 125),
- (8, 4, '2024-04-08 12:00:00', '2024-04-08 16:00:00', 105),
- (9, 5, '2024-04-09 07:00:00', '2024-04-09 11:00:00', 115),
- (10, 5, '2024-04-10 11:00:00', '2024-04-10 15:00:00', 135),
- (11, 6, '2024-04-11 09:00:00', '2024-04-11 13:00:00', 155),
- (12, 6, '2024-04-12 08:00:00', '2024-04-12 12:00:00', 125),
- (13, 7, '2024-04-13 10:00:00', '2024-04-13 14:00:00', 145),
- (14, 7, '2024-04-14 11:00:00', '2024-04-14 15:00:00', 120),
- (15, 8, '2024-04-15 12:00:00', '2024-04-15 16:00:00', 130),
- (16, 8, '2024-04-16 08:00:00', '2024-04-16 12:00:00', 110),
- (17, 9, '2024-04-17 09:00:00', '2024-04-17 13:00:00', 140),
- (18, 9, '2024-04-18 10:00:00', '2024-04-18 14:00:00', 150),
- (19, 10, '2024-04-19 08:00:00', '2024-04-19 12:00:00', 120),
- (20, 10, '2024-04-20 11:00:00', '2024-04-20 15:00:00', 130),
- (21, 11, '2024-04-21 10:00:00', '2024-04-21 14:00:00', 140),
- (22, 11, '2024-04-22 12:00:00', '2024-04-22 16:00:00', 160),
- (23, 12, '2024-04-23 09:00:00', '2024-04-23 13:00:00', 125),
- (24, 12, '2024-04-24 07:00:00', '2024-04-24 11:00:00', 135),
- (25, 13, '2024-04-25 11:00:00', '2024-04-25 15:00:00', 115),
- (26, 13, '2024-04-26 12:00:00', '2024-04-26 16:00:00', 105),
- (27, 14, '2024-04-27 10:00:00', '2024-04-27 14:00:00', 145),
- (28, 14, '2024-04-28 08:00:00', '2024-04-28 12:00:00', 125),
- (29, 15, '2024-04-29 11:00:00', '2024-04-29 15:00:00', 135),
- (30, 15, '2024-04-30 09:00:00', '2024-04-30 13:00:00', 155),
- (31, 16, '2024-05-01 08:00:00', '2024-05-01 12:00:00', 125),
- (32, 16, '2024-05-02 10:00:00', '2024-05-02 14:00:00', 145),
- (33, 17, '2024-05-03 12:00:00', '2024-05-03 16:00:00', 130),
- (34, 17, '2024-05-04 09:00:00', '2024-05-04 13:00:00', 140),
- (35, 18, '2024-05-05 11:00:00', '2024-05-05 15:00:00', 150),
- (36, 18, '2024-05-06 08:00:00', '2024-05-06 12:00:00', 120),
- (37, 19, '2024-05-07 10:00:00', '2024-05-07 14:00:00', 110),
- (38, 19, '2024-05-08 12:00:00', '2024-05-08 16:00:00', 130),
- (39, 20, '2024-05-09 07:00:00', '2024-05-09 11:00:00', 140),
- (40, 20, '2024-05-10 11:00:00', '2024-05-10 15:00:00', 150),
- (41, 21, '2024-05-11 09:00:00', '2024-05-11 13:00:00', 125),
- (42, 21, '2024-05-12 08:00:00', '2024-05-12 12:00:00', 135),
- (43, 22, '2024-05-13 10:00:00', '2024-05-13 14:00:00', 115),
- (44, 22, '2024-05-14 11:00:00', '2024-05-14 15:00:00', 105),
- (45, 23, '2024-05-15 12:00:00', '2024-05-15 16:00:00', 145),
- (46, 23, '2024-05-16 08:00:00', '2024-05-16 12:00:00', 125),
- (47, 24, '2024-05-17 09:00:00', '2024-05-17 13:00:00', 135),
- (48, 24, '2024-05-18 10:00:00', '2024-05-18 14:00:00', 145),
- (49, 25, '2024-05-19 08:00:00', '2024-05-19 12:00:00', 155),
- (50, 25, '2024-05-20 11:00:00', '2024-05-20 15:00:00', 125);
- -- Tworzenie tabeli firm serwisowych
- CREATE TABLE Servicing_Companies (
- company_id INT PRIMARY KEY,
- name VARCHAR(255),
- working_hours VARCHAR(255)
- );
- -- Wstawianie danych do tabeli firm serwisowych
- INSERT INTO Servicing_Companies (company_id, name, working_hours)
- VALUES (1, 'Company Y', '6:00-14:00, 14:00-22:00, 22:00-6:00');
- ############################
- ALTER TABLE dbo.Renewable_Energy_Devices
- ADD CONSTRAINT FK_OZE_SC FOREIGN KEY (company_id) REFERENCES Servicing_Companies(company_id);
- ############################
- -- Tworzenie tabeli zmian serwisowych
- CREATE TABLE Servicing_Shifts (
- shift_number INT PRIMARY KEY IDENTITY,
- shift_date DATE,
- shift_type INT CHECK (shift_type >= 1 AND shift_type <= 3),
- start_time TIME,
- end_time TIME
- );
- -- Wstawianie danych do tabeli zmian serwisowych (poniedziałek - sobota)
- INSERT INTO Servicing_Shifts (shift_date, shift_type, start_time, end_time) VALUES
- ('2024-04-01', 1, '06:00:00', '14:00:00'),
- ('2024-04-01', 2, '14:00:00', '22:00:00'),
- ('2024-04-01', 3, '22:00:00', '06:00:00'),
- ('2024-04-02', 1, '06:00:00', '14:00:00'),
- ('2024-04-02', 2, '14:00:00', '22:00:00'),
- ('2024-04-02', 3, '22:00:00', '06:00:00'),
- ('2024-04-03', 1, '06:00:00', '14:00:00'),
- ('2024-04-03', 2, '14:00:00', '22:00:00'),
- ('2024-04-03', 3, '22:00:00', '06:00:00'),
- ('2024-04-04', 1, '06:00:00', '14:00:00'),
- ('2024-04-04', 2, '14:00:00', '22:00:00'),
- ('2024-04-04', 3, '22:00:00', '06:00:00'),
- ('2024-04-05', 1, '06:00:00', '14:00:00'),
- ('2024-04-05', 2, '14:00:00', '22:00:00'),
- ('2024-04-05', 3, '22:00:00', '06:00:00'),
- ('2024-04-06', 1, '06:00:00', '14:00:00'),
- ('2024-04-06', 2, '14:00:00', '22:00:00'),
- ('2024-04-06', 3, '22:00:00', '06:00:00');
- -- Tworzenie tabeli napraw
- CREATE TABLE Repairs (
- repair_id INT PRIMARY KEY IDENTITY,
- device_id NVARCHAR(26),
- repair_start DATETIME,
- repair_end DATETIME,
- repair_description NVARCHAR(255),
- FOREIGN KEY (device_id) REFERENCES Renewable_Energy_Devices(device_id)
- );
- -- Wstawianie danych do tabeli napraw (można kilka razy)
- DECLARE @i INT = 0
- WHILE @i <= 9
- BEGIN
- INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
- VALUES (CONCAT('0000000000000000000000000', @i), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()), 'Naprawa urządzenia');
- SET @i = @i + 1
- END
- DECLARE @j INT = 10
- WHILE @j <= 50
- BEGIN
- INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
- VALUES (CONCAT('000000000000000000000000', @j), DATEADD(DAY, -@j, GETDATE()), DATEADD(DAY, -@j+1, GETDATE()), 'Naprawa urządzenia');
- SET @j = @j + 1
- END
- --RAPORTY ####################################################3
- --Na jakiej zmianie dane urządzenie OZE uległo awarii:
- SELECT df.device_id, df.shift_number
- FROM Device_Failures df
- ORDER BY df.failure_start;
- --Na jakiej zmianie urządzenie OZE zostało naprawione:
- SELECT r.device_id, df.shift_number
- FROM Repairs r
- JOIN Device_Failures df ON r.device_id = df.device_id
- WHERE r.repair_start BETWEEN df.failure_start AND df.failure_end
- ORDER BY r.repair_start;
- --Jaki był czas przestoju danego urządzenia OZE w ciągu zadanego okresu czasu:
- SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
- FROM Device_Failures df
- GROUP BY df.device_id;
- --Jaki był czas przestoju danego urządzenia OZE w ciągu zadanego okresu czasu nie wliczając w to czasu kiedy firma serwisująca nie pracowała (weekendy):
- SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
- FROM Device_Failures df
- JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
- WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
- GROUP BY df.device_id;
- --Jaki był sumaryczny czas przestoju wszystkich urządzeń OZE w ciągu zadanego okresu czasu nie wliczając w to czasu kiedy firma serwisująca nie pracowała (weekendy):
- SELECT SUM(downtime_hours) AS total_downtime_hours
- FROM (
- SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
- FROM Device_Failures df
- JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
- WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
- GROUP BY df.device_id
- ) AS downtime_per_device;
- --Jaki jest procentowy udział urządzeń OZE w poszczególnych fazach awarii w stosunku do ilości wszystkich dostępnych urządzeń OZE:
- WITH Device_Failure_Count AS (
- SELECT device_id, COUNT(*) AS failure_count
- FROM Device_Failures
- GROUP BY device_id
- )
- SELECT df.device_status, COUNT(*) AS device_count, DFC.failure_count, CAST(COUNT(*) AS DECIMAL) / DFC.failure_count * 100 AS percentage
- FROM Renewable_Energy_Devices df
- JOIN Device_Failure_Count DFC ON df.device_id = DFC.device_id
- GROUP BY df.device_status, DFC.failure_count;
- --Na ilu zmianach nie pracowało dane urządzenie OZE (wliczając to zmianę na której zgłoszono awarię i na której uruchomiono ja znów produkcyjnie):
- SELECT df.device_id, COUNT(DISTINCT df.shift_number) AS downtime_shifts
- FROM Device_Failures df
- JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
- GROUP BY df.device_id;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement