Advertisement
JanuszKowalski123

oze3

Apr 15th, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.89 KB | None | 0 0
  1. CREATE TABLE Renewable_Energy_Devices (
  2. device_id NVARCHAR(26) PRIMARY KEY,
  3. device_status INT CHECK (device_status >= 0 AND device_status <= 6)
  4. );
  5.  
  6.  
  7. CREATE TABLE Device_Failures (
  8. failure_id INT PRIMARY KEY IDENTITY,
  9. device_id NVARCHAR(26),
  10. shift_number INT,
  11. failure_start DATETIME,
  12. failure_end DATETIME,
  13. FOREIGN KEY (device_id) REFERENCES Renewable_Energy_Devices(device_id)
  14. );
  15.  
  16.  
  17. CREATE TABLE Customers (
  18. customer_id INT PRIMARY KEY,
  19. name VARCHAR(255),
  20. email VARCHAR(255),
  21. phone VARCHAR(20),
  22. address VARCHAR(255)
  23. );
  24.  
  25.  
  26.  
  27. CREATE TABLE Servicing_Companies (
  28. company_id INT PRIMARY KEY,
  29. name VARCHAR(255),
  30. working_hours VARCHAR(255) -- Można to dostosować w zależności od potrzeb
  31. );
  32.  
  33.  
  34. CREATE TABLE Servicing_Shifts (
  35. shift_number INT PRIMARY KEY,
  36. start_time TIME,
  37. end_time TIME
  38. );
  39.  
  40.  
  41.  
  42.  
  43.  
  44. INSERT INTO Renewable_Energy_Devices (device_id, device_status)
  45. VALUES ('12345678901234567890123456', 0),
  46. ('22345678901234567890123456', 1),
  47. ('32345678901234567890123456', 2),
  48. ('42345678901234567890123456', 3),
  49. ('52345678901234567890123456', 4);
  50.  
  51.  
  52. INSERT INTO Customers (customer_id, name, email, phone, address)
  53. VALUES (1, 'John Doe', '[email protected]', '123456789', '123 Main St'),
  54. (2, 'Jane Smith', '[email protected]', '987654321', '456 Elm St');
  55.  
  56.  
  57.  
  58. INSERT INTO Servicing_Companies (company_id, name, working_hours)
  59. VALUES (1, 'Company Y', '6:00-14:00, 14:00-22:00, 22:00-6:00');
  60.  
  61.  
  62. DECLARE @i INT = 1
  63. WHILE @i <= 500
  64. BEGIN
  65. INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
  66. VALUES (CONCAT(@i, '2345678901234567890123456'), 1, DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
  67. SET @i = @i + 1
  68. END
  69.  
  70.  
  71.  
  72. DECLARE @i INT = 1
  73. WHILE @i <= 500
  74. BEGIN
  75. INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
  76. VALUES (CONCAT(@i, '2345678901234567890123456'), 1, DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
  77. SET @i = @i + 1
  78. END
  79.  
  80.  
  81. DECLARE @i INT = 1
  82. WHILE @i <= 500
  83. BEGIN
  84. INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
  85. VALUES (CONCAT(@i, '2345678901234567890123456'), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()), 'Naprawa urządzenia');
  86. SET @i = @i + 1
  87. END
  88.  
  89.  
  90.  
  91. --Na jakiej zmianie dane urządzenie OZE uległo awarii:
  92.  
  93. SELECT df.device_id, df.shift_number
  94. FROM Device_Failures df
  95. ORDER BY df.failure_start;
  96.  
  97.  
  98. --Na jakiej zmianie urządzenie OZE zostało naprawione:
  99.  
  100. SELECT r.device_id, df.shift_number
  101. FROM Repairs r
  102. JOIN Device_Failures df ON r.device_id = df.device_id
  103. WHERE r.repair_start BETWEEN df.failure_start AND df.failure_end
  104. ORDER BY r.repair_start;
  105.  
  106.  
  107. --Jaki był czas przestoju danego urządzenia OZE w ciągu zadanego okresu czasu:
  108.  
  109. SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  110. FROM Device_Failures df
  111. GROUP BY df.device_id;
  112.  
  113.  
  114. --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):
  115. sql
  116.  
  117. SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  118. FROM Device_Failures df
  119. JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  120. WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
  121. GROUP BY df.device_id;
  122.  
  123.  
  124. --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):
  125.  
  126. SELECT SUM(downtime_hours) AS total_downtime_hours
  127. FROM (
  128. SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  129. FROM Device_Failures df
  130. JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  131. WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
  132. GROUP BY df.device_id
  133. ) AS downtime_per_device;
  134.  
  135.  
  136.  
  137. --Jaki jest procentowy udział urządzeń OZE w poszczególnych fazach awarii w stosunku do ilości wszystkich dostępnych urządzeń OZE:
  138.  
  139. WITH Device_Failure_Count AS (
  140. SELECT device_id, COUNT(*) AS failure_count
  141. FROM Device_Failures
  142. GROUP BY device_id
  143. )
  144. SELECT df.device_status, COUNT(*) AS device_count, DFC.failure_count, CAST(COUNT(*) AS DECIMAL) / DFC.failure_count * 100 AS percentage
  145. FROM Renewable_Energy_Devices df
  146. JOIN Device_Failure_Count DFC ON df.device_id = DFC.device_id
  147. GROUP BY df.device_status, DFC.failure_count;
  148.  
  149.  
  150. --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):
  151.  
  152. SELECT df.device_id, COUNT(DISTINCT df.shift_number) AS downtime_shifts
  153. FROM Device_Failures df
  154. JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  155. GROUP BY df.device_id;
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement