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)
- );
- -- Wstawianie danych do tabeli urządzeń OZE
- INSERT INTO Renewable_Energy_Devices (device_id, device_status, device_power)
- VALUES
- ('00000000000000000000000000',0, 1000),
- ('00000000000000000000000001',0, 1000),
- ('00000000000000000000000002',0, 1000),
- ('00000000000000000000000003',0, 2000),
- ('00000000000000000000000004',0, 1000),
- ('00000000000000000000000005',0, 1000),
- ('00000000000000000000000006',0, 1000),
- ('00000000000000000000000007',3, 1000),
- ('00000000000000000000000008',0, 5000),
- ('00000000000000000000000009',0, 1000),
- ('00000000000000000000000010',0, 1000),
- ('00000000000000000000000011',0, 1000),
- ('00000000000000000000000012',0, 1000),
- ('00000000000000000000000013',0, 1000),
- ('00000000000000000000000014',0, 1000),
- ('00000000000000000000000015',2, 4000),
- ('00000000000000000000000016',1, 1000),
- ('00000000000000000000000017',0, 1000),
- ('00000000000000000000000018',0, 1000),
- ('00000000000000000000000019',0, 1000),
- ('00000000000000000000000020',0, 7000),
- ('00000000000000000000000021',0, 1000),
- ('00000000000000000000000022',0, 1000),
- ('00000000000000000000000023',0, 1000),
- ('00000000000000000000000024',0, 1000),
- ('00000000000000000000000025',0, 1000),
- ('00000000000000000000000026',0, 1000),
- ('00000000000000000000000027',0, 1000),
- ('00000000000000000000000028',0, 1000),
- ('00000000000000000000000029',0, 1000),
- ('00000000000000000000000030',0, 1000),
- ('00000000000000000000000031',0, 8000),
- ('00000000000000000000000032',0, 1000),
- ('00000000000000000000000033',0, 1000),
- ('00000000000000000000000034',0, 1000),
- ('00000000000000000000000035',0, 1000),
- ('00000000000000000000000036',0, 1000),
- ('00000000000000000000000037',0, 1000),
- ('00000000000000000000000038',0, 1000),
- ('00000000000000000000000039',0, 1000),
- ('00000000000000000000000040',0, 1000),
- ('00000000000000000000000041',0, 1000),
- ('00000000000000000000000042',0, 1000),
- ('00000000000000000000000043',0, 1000),
- ('00000000000000000000000044',0, 1000),
- ('00000000000000000000000045',0, 1000),
- ('00000000000000000000000046',0, 9000),
- ('00000000000000000000000047',0, 1000),
- ('00000000000000000000000048',0, 1000),
- ('00000000000000000000000049',0, 1000),
- ('00000000000000000000000050',3, 7000);
- -- 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 @i INT = 10
- WHILE @i <= 50
- BEGIN
- INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
- VALUES (CONCAT('000000000000000000000000', @i), round(rand() * 2 + 1,0,0), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
- SET @i = @i + 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 firm serwisowych
- CREATE TABLE Servicing_Companies (
- company_id INT PRIMARY KEY,
- name VARCHAR(255),
- working_hours VARCHAR(255) -- Można to dostosować w zależności od potrzeb
- );
- -- 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');
- -- 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 @i INT = 10
- WHILE @i <= 50
- BEGIN
- INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
- VALUES (CONCAT('000000000000000000000000', @i), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()), 'Naprawa urządzenia');
- SET @i = @i + 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