Advertisement
JanuszKowalski123

oze6

Apr 16th, 2024 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 10.80 KB | Source Code | 0 0
  1. -- Tworzenie tabeli urządzeń OZE
  2.  
  3. CREATE TABLE Renewable_Energy_Devices (
  4.     device_id NVARCHAR(26) PRIMARY KEY,
  5.     device_status INT CHECK (device_status >= 0 AND device_status <= 6),
  6.     device_power DECIMAL(18,0)
  7. );
  8.  
  9. -- Wstawianie danych do tabeli urządzeń OZE
  10. INSERT INTO Renewable_Energy_Devices (device_id, device_status, device_power)
  11. VALUES
  12. ('00000000000000000000000000',0,    1000),
  13. ('00000000000000000000000001',0,    1000),
  14. ('00000000000000000000000002',0,    1000),
  15. ('00000000000000000000000003',0,    2000),
  16. ('00000000000000000000000004',0,    1000),
  17. ('00000000000000000000000005',0,    1000),
  18. ('00000000000000000000000006',0,    1000),
  19. ('00000000000000000000000007',3,    1000),
  20. ('00000000000000000000000008',0,    5000),
  21. ('00000000000000000000000009',0,    1000),
  22. ('00000000000000000000000010',0,    1000),
  23. ('00000000000000000000000011',0,    1000),
  24. ('00000000000000000000000012',0,    1000),
  25. ('00000000000000000000000013',0,    1000),
  26. ('00000000000000000000000014',0,    1000),
  27. ('00000000000000000000000015',2,    4000),
  28. ('00000000000000000000000016',1,    1000),
  29. ('00000000000000000000000017',0,    1000),
  30. ('00000000000000000000000018',0,    1000),
  31. ('00000000000000000000000019',0,    1000),
  32. ('00000000000000000000000020',0,    7000),
  33. ('00000000000000000000000021',0,    1000),
  34. ('00000000000000000000000022',0,    1000),
  35. ('00000000000000000000000023',0,    1000),
  36. ('00000000000000000000000024',0,    1000),
  37. ('00000000000000000000000025',0,    1000),
  38. ('00000000000000000000000026',0,    1000),
  39. ('00000000000000000000000027',0,    1000),
  40. ('00000000000000000000000028',0,    1000),
  41. ('00000000000000000000000029',0,    1000),
  42. ('00000000000000000000000030',0,    1000),
  43. ('00000000000000000000000031',0,    8000),
  44. ('00000000000000000000000032',0,    1000),
  45. ('00000000000000000000000033',0,    1000),
  46. ('00000000000000000000000034',0,    1000),
  47. ('00000000000000000000000035',0,    1000),
  48. ('00000000000000000000000036',0,    1000),
  49. ('00000000000000000000000037',0,    1000),
  50. ('00000000000000000000000038',0,    1000),
  51. ('00000000000000000000000039',0,    1000),
  52. ('00000000000000000000000040',0,    1000),
  53. ('00000000000000000000000041',0,    1000),
  54. ('00000000000000000000000042',0,    1000),
  55. ('00000000000000000000000043',0,    1000),
  56. ('00000000000000000000000044',0,    1000),
  57. ('00000000000000000000000045',0,    1000),
  58. ('00000000000000000000000046',0,    9000),
  59. ('00000000000000000000000047',0,    1000),
  60. ('00000000000000000000000048',0,    1000),
  61. ('00000000000000000000000049',0,    1000),
  62. ('00000000000000000000000050',3,    7000);
  63.  
  64.  
  65. -- Tworzenie tabeli zgłoszeń awarii
  66.  
  67. CREATE TABLE Device_Failures (
  68.     failure_id INT PRIMARY KEY IDENTITY,
  69.     device_id NVARCHAR(26),
  70.     shift_number INT,
  71.     failure_start DATETIME,
  72.     failure_end DATETIME,
  73.     FOREIGN KEY (device_id) REFERENCES Renewable_Energy_Devices(device_id)
  74. );
  75.  
  76. -- Wstawianie danych do tabeli zgłoszeń awarii
  77.  
  78. DECLARE @i INT = 0
  79. WHILE @i <= 9
  80. BEGIN
  81.     INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
  82.     VALUES (CONCAT('0000000000000000000000000', @i), round(rand() * 2 + 1,0,0), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
  83.     SET @i = @i + 1
  84. END
  85.  
  86. DECLARE @i INT = 10
  87. WHILE @i <= 50
  88. BEGIN
  89.     INSERT INTO Device_Failures (device_id, shift_number, failure_start, failure_end)
  90.     VALUES (CONCAT('000000000000000000000000', @i), round(rand() * 2 + 1,0,0), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()));
  91.     SET @i = @i + 1
  92. END
  93.  
  94.  
  95. -- Tworzenie tabeli klientów
  96.  
  97. CREATE TABLE Customers (
  98.     customer_id INT PRIMARY KEY,
  99.     name VARCHAR(255),
  100.     email VARCHAR(255),
  101.     phone VARCHAR(20),
  102.     address VARCHAR(255)
  103. );
  104.  
  105. -- Wstawianie danych do tabeli klientów
  106. INSERT INTO Customers (customer_id, name, email, phone, address)
  107. VALUES
  108. (1, 'John Doe', '[email protected]', '123456789', '123 Main St'),
  109. (2, 'Jane Smith', '[email protected]', '987654321', '456 Elm St'),
  110. (3, 'Michael Johnson', '[email protected]', '555123456', '789 Oak St'),
  111. (4, 'Emily Brown', '[email protected]', '444987654', '321 Pine St'),
  112. (5, 'William Wilson', '[email protected]', '789456123', '654 Birch St'),
  113. (6, 'Olivia Taylor', '[email protected]', '987123456', '987 Maple St'),
  114. (7, 'James Martinez', '[email protected]', '321654987', '159 Cedar St'),
  115. (8, 'Emma Anderson', '[email protected]', '666333999', '753 Walnut St'),
  116. (9, 'Noah Thomas', '[email protected]', '222333444', '852 Spruce St'),
  117. (10, 'Ava Hernandez', '[email protected]', '111222333', '369 Cherry St'),
  118. (11, 'Sophia Lopez', '[email protected]', '777888999', '741 Elm St'),
  119. (12, 'Matthew Gonzalez', '[email protected]', '222111333', '258 Oak St'),
  120. (13, 'Isabella Perez', '[email protected]', '666777888', '951 Pine St'),
  121. (14, 'Jacob Robinson', '[email protected]', '999888777', '753 Maple St'),
  122. (15, 'Ethan Lee', '[email protected]', '111222333', '852 Cedar St'),
  123. (16, 'Oliver Walker', '[email protected]', '444555666', '963 Walnut St'),
  124. (17, 'Daniel Hall', '[email protected]', '888777666', '357 Birch St'),
  125. (18, 'Liam Young', '[email protected]', '999888777', '159 Spruce St'),
  126. (19, 'Charlotte Hernandez', '[email protected]', '333222111', '456 Cherry St'),
  127. (20, 'Amelia Moore', '[email protected]', '222333444', '789 Elm St'),
  128. (21, 'Benjamin Nelson', '[email protected]', '444555666', '357 Pine St'),
  129. (22, 'Lucas Hill', '[email protected]', '111222333', '852 Maple St'),
  130. (23, 'Mia King', '[email protected]', '555666777', '963 Cedar St'),
  131. (24, 'Harper Baker', '[email protected]', '777888999', '357 Walnut St'),
  132. (25, 'Evelyn Adams', '[email protected]', '999888777', '456 Birch St');
  133.  
  134. INSERT INTO Customers (customer_id, name, email, phone, address)
  135. VALUES (26, 'John Doe', '[email protected]', '123456789', '556 Main St'),
  136.        (27, 'Jane Smith', '[email protected]', '987654321', '431 Elm St');
  137.  
  138.  
  139.  
  140.  
  141. -- Tworzenie tabeli firm serwisowych
  142.  
  143. CREATE TABLE Servicing_Companies (
  144.     company_id INT PRIMARY KEY,
  145.     name VARCHAR(255),
  146.     working_hours VARCHAR(255) -- Można to dostosować w zależności od potrzeb
  147. );
  148.  
  149. -- Wstawianie danych do tabeli firm serwisowych
  150.  
  151. INSERT INTO Servicing_Companies (company_id, name, working_hours)
  152. VALUES (1, 'Company Y', '6:00-14:00, 14:00-22:00, 22:00-6:00');
  153.  
  154.  
  155.  
  156.  
  157. -- Tworzenie tabeli zmian serwisowych
  158.  
  159. CREATE TABLE Servicing_Shifts (
  160.     shift_number INT PRIMARY KEY IDENTITY,
  161.     shift_date DATE,
  162.     shift_type INT CHECK (shift_type >= 1 AND shift_type <= 3),
  163.     start_time TIME,
  164.     end_time TIME
  165. );
  166.  
  167. -- Wstawianie danych do tabeli zmian serwisowych (poniedziałek - sobota)
  168. INSERT INTO Servicing_Shifts (shift_date, shift_type, start_time, end_time) VALUES
  169. ('2024-04-01', 1, '06:00:00', '14:00:00'),
  170. ('2024-04-01', 2, '14:00:00', '22:00:00'),
  171. ('2024-04-01', 3, '22:00:00', '06:00:00'),
  172. ('2024-04-02', 1, '06:00:00', '14:00:00'),
  173. ('2024-04-02', 2, '14:00:00', '22:00:00'),
  174. ('2024-04-02', 3, '22:00:00', '06:00:00'),
  175. ('2024-04-03', 1, '06:00:00', '14:00:00'),
  176. ('2024-04-03', 2, '14:00:00', '22:00:00'),
  177. ('2024-04-03', 3, '22:00:00', '06:00:00'),
  178. ('2024-04-04', 1, '06:00:00', '14:00:00'),
  179. ('2024-04-04', 2, '14:00:00', '22:00:00'),
  180. ('2024-04-04', 3, '22:00:00', '06:00:00'),
  181. ('2024-04-05', 1, '06:00:00', '14:00:00'),
  182. ('2024-04-05', 2, '14:00:00', '22:00:00'),
  183. ('2024-04-05', 3, '22:00:00', '06:00:00'),
  184. ('2024-04-06', 1, '06:00:00', '14:00:00'),
  185. ('2024-04-06', 2, '14:00:00', '22:00:00'),
  186. ('2024-04-06', 3, '22:00:00', '06:00:00');
  187.  
  188.  
  189.  
  190. -- Tworzenie tabeli napraw
  191.  
  192.  CREATE TABLE Repairs (
  193.     repair_id INT PRIMARY KEY IDENTITY,
  194.     device_id NVARCHAR(26),
  195.     repair_start DATETIME,
  196.     repair_end DATETIME,
  197.     repair_description NVARCHAR(255),
  198.     FOREIGN KEY (device_id) REFERENCES Renewable_Energy_Devices(device_id)
  199. );
  200.  
  201. -- Wstawianie danych do tabeli napraw  (można kilka razy)
  202.  
  203. DECLARE @i INT = 0
  204. WHILE @i <= 9
  205. BEGIN
  206.     INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
  207.     VALUES (CONCAT('0000000000000000000000000', @i), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()), 'Naprawa urządzenia');
  208.     SET @i = @i + 1
  209. END
  210.  
  211. DECLARE @i INT = 10
  212. WHILE @i <= 50
  213. BEGIN
  214.     INSERT INTO Repairs (device_id, repair_start, repair_end, repair_description)
  215.     VALUES (CONCAT('000000000000000000000000', @i), DATEADD(DAY, -@i, GETDATE()), DATEADD(DAY, -@i+1, GETDATE()), 'Naprawa urządzenia');
  216.     SET @i = @i + 1
  217. END
  218.  
  219.  
  220. --RAPORTY ####################################################3
  221.  
  222. --Na jakiej zmianie dane urządzenie OZE uległo awarii:
  223.  
  224. SELECT df.device_id, df.shift_number
  225. FROM Device_Failures df
  226. ORDER BY df.failure_start;
  227.  
  228.  
  229. --Na jakiej zmianie urządzenie OZE zostało naprawione:
  230.  
  231. SELECT r.device_id, df.shift_number
  232. FROM Repairs r
  233. JOIN Device_Failures df ON r.device_id = df.device_id
  234. WHERE r.repair_start BETWEEN df.failure_start AND df.failure_end
  235. ORDER BY r.repair_start;
  236.  
  237.  
  238. --Jaki był czas przestoju danego urządzenia OZE w ciągu zadanego okresu czasu:
  239.  
  240. SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  241. FROM Device_Failures df
  242. GROUP BY df.device_id;
  243.  
  244.  
  245. --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):
  246.  
  247. SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  248. FROM Device_Failures df
  249. JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  250. WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
  251. GROUP BY df.device_id;
  252.  
  253.  
  254. --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):
  255.  
  256. SELECT SUM(downtime_hours) AS total_downtime_hours
  257. FROM (
  258.     SELECT df.device_id, SUM(DATEDIFF(HOUR, df.failure_start, df.failure_end)) AS downtime_hours
  259.     FROM Device_Failures df
  260.     JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  261.     WHERE DATENAME(WEEKDAY, df.failure_start) NOT IN ('Saturday', 'Sunday')
  262.     GROUP BY df.device_id
  263. ) AS downtime_per_device;
  264.  
  265.  
  266.  
  267. --Jaki jest procentowy udział urządzeń OZE w poszczególnych fazach awarii w stosunku do ilości wszystkich dostępnych urządzeń OZE:
  268.  
  269. WITH Device_Failure_Count AS (
  270.     SELECT device_id, COUNT(*) AS failure_count
  271.     FROM Device_Failures
  272.     GROUP BY device_id
  273. )
  274. SELECT df.device_status, COUNT(*) AS device_count, DFC.failure_count, CAST(COUNT(*) AS DECIMAL) / DFC.failure_count * 100 AS percentage
  275. FROM Renewable_Energy_Devices df
  276. JOIN Device_Failure_Count DFC ON df.device_id = DFC.device_id
  277. GROUP BY df.device_status, DFC.failure_count;
  278.  
  279.  
  280. --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):
  281.  
  282. SELECT df.device_id, COUNT(DISTINCT df.shift_number) AS downtime_shifts
  283. FROM Device_Failures df
  284. JOIN Servicing_Shifts ss ON df.shift_number = ss.shift_number
  285. GROUP BY df.device_id;
Tags: sql
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement