File size: 5,054 Bytes
f33c4ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ded0c4
f33c4ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ded0c4
f33c4ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ded0c4
f33c4ea
 
0ded0c4
f33c4ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
-- 1. Driver Performance Summary with Weather
CREATE VIEW DriverPerformanceSummaryWithWeather AS
SELECT 
    l.driver_name,
    e.event_name,
    s.session_type,
    t.track_name,
    COUNT(l.lap_id) AS total_laps,
    AVG(l.lap_time_in_seconds) AS avg_lap_time,
    MIN(l.lap_time_in_seconds) AS best_lap_time,
    AVG(l.sector_1_time_in_seconds) AS avg_sector1_time,
    AVG(l.sector_2_time_in_seconds) AS avg_sector2_time,
    AVG(l.sector_3_time_in_seconds) AS avg_sector3_time,
    AVG(l.finish_line_speed_trap_in_km) AS avg_finish_line_speed,
    COUNT(CASE WHEN l.is_personal_best THEN 1 END) AS personal_best_laps,
    AVG(w.air_temperature_in_celsius) AS avg_air_temp,
    AVG(w.track_temperature_in_celsius) AS avg_track_temp,
    SUM(CASE WHEN w.is_raining THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS rain_percentage
FROM Laps l
JOIN Sessions s ON l.session_id = s.session_id
JOIN Tracks t ON s.track_id = t.track_id
JOIN Event e ON s.event_id = e.event_id
LEFT JOIN Weather w ON s.session_id = w.session_id 
    AND l.lap_start_time_in_datetime BETWEEN w.datetime AND datetime(w.datetime, '+5 minutes')
GROUP BY l.driver_name, e.event_id, s.session_id;

-- 2. Tyre Performance Analysis with Weather
CREATE VIEW TyrePerformanceAnalysisWithWeather AS
SELECT 
    l.driver_name,
    e.event_name,
    s.session_type,
    t.track_name,
    l.tyre_compound,
    AVG(l.tyre_life_in_laps) AS avg_tyre_life,
    AVG(l.lap_time_in_seconds) AS avg_lap_time,
    AVG(l.longest_strait_speed_trap_in_km) AS avg_top_speed,
    COUNT(CASE WHEN l.is_fresh_tyre THEN 1 END) AS fresh_tyre_laps,
    COUNT(CASE WHEN NOT l.is_fresh_tyre THEN 1 END) AS used_tyre_laps,
    AVG(w.track_temperature_in_celsius) AS avg_track_temp,
    AVG(w.air_temperature_in_celsius) AS avg_air_temp
FROM Laps l
JOIN Sessions s ON l.session_id = s.session_id
JOIN Tracks t ON s.track_id = t.track_id
JOIN Event e ON s.event_id = e.event_id
LEFT JOIN Weather w ON s.session_id = w.session_id 
    AND l.lap_start_time_in_datetime BETWEEN w.datetime AND datetime(w.datetime, '+5 minutes')
GROUP BY l.driver_name, e.event_id, s.session_id, l.tyre_compound;

-- 3. Weather Impact Analysis
CREATE VIEW WeatherImpactAnalysis AS
SELECT 
    e.event_name,
    s.session_type,
    t.track_name,
    AVG(w.air_temperature_in_celsius) AS avg_air_temp,
    AVG(w.track_temperature_in_celsius) AS avg_track_temp,
    AVG(w.relative_air_humidity_in_percentage) AS avg_humidity,
    AVG(w.wind_speed_in_meters_per_seconds) AS avg_wind_speed,
    SUM(CASE WHEN w.is_raining THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS rain_percentage,
    AVG(l.lap_time_in_seconds) AS avg_lap_time,
    MIN(l.lap_time_in_seconds) AS best_lap_time
FROM Weather w
JOIN Sessions s ON w.session_id = s.session_id
JOIN Tracks t ON s.track_id = t.track_id
JOIN Event e ON s.event_id = e.event_id
JOIN Laps l ON s.session_id = l.session_id
    AND l.lap_start_time_in_datetime BETWEEN w.datetime AND datetime(w.datetime, '+5 minutes')
GROUP BY e.event_id, s.session_id;

-- 4. Event Performance Overview
CREATE VIEW EventPerformanceOverview AS
SELECT 
    e.event_name,
    e.country,
    e.location,
    s.session_type,
    COUNT(DISTINCT l.driver_name) AS driver_count,
    AVG(l.lap_time_in_seconds) AS avg_lap_time,
    MIN(l.lap_time_in_seconds) AS best_lap_time,
    MAX(l.finish_line_speed_trap_in_km) AS max_finish_line_speed,
    AVG(w.air_temperature_in_celsius) AS avg_air_temp,
    AVG(w.track_temperature_in_celsius) AS avg_track_temp,
    SUM(CASE WHEN w.is_raining THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS rain_percentage
FROM Event e
JOIN Sessions s ON e.event_id = s.event_id
JOIN Laps l ON s.session_id = l.session_id
LEFT JOIN Weather w ON s.session_id = w.session_id 
    AND l.lap_start_time_in_datetime BETWEEN w.datetime AND datetime(w.datetime, '+5 minutes')
GROUP BY e.event_id, s.session_id;

-- 5. Telemetry Analysis with Weather
CREATE VIEW TelemetryAnalysisWithWeather AS
SELECT 
    l.lap_id,
    l.driver_name,
    e.event_name,
    s.session_type,
    t.track_name,
    l.lap_number,
    l.lap_time_in_seconds,
    AVG(tel.speed_in_km) AS avg_speed,
    MAX(tel.speed_in_km) AS max_speed,
    AVG(tel.RPM) AS avg_RPM,
    MAX(tel.RPM) AS max_RPM,
    AVG(tel.throttle_input) AS avg_throttle,
    SUM(CASE WHEN tel.is_brake_pressed THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS brake_percentage,
    SUM(CASE WHEN tel.is_DRS_open THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS drs_usage_percentage,
    SUM(CASE WHEN tel.is_off_track THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS off_track_percentage,
    AVG(w.air_temperature_in_celsius) AS avg_air_temp,
    AVG(w.track_temperature_in_celsius) AS avg_track_temp,
    AVG(w.wind_speed_in_meters_per_seconds) AS avg_wind_speed
FROM Laps l
JOIN Sessions s ON l.session_id = s.session_id
JOIN Tracks t ON s.track_id = t.track_id
JOIN Event e ON s.event_id = e.event_id
JOIN Telemetry tel ON l.lap_id = tel.lap_id
LEFT JOIN Weather w ON s.session_id = w.session_id 
    AND tel.datetime BETWEEN w.datetime AND datetime(w.datetime, '+5 minutes')
GROUP BY l.lap_id;