Home > Net >  SQL Server Data redundancy
SQL Server Data redundancy

Time:03-25

I'm trying to find out the pitstop strategy followed by teams in F1 and which strategy on average yields the better winning results. However every time I try to execute the query I just get redundant data.

Dataset Example:

DriverTable

DriverId DriverRef DriverNumber
1 Lewis 22
2 Alonso 14
3 Max 1

RaceResult

ResultID RaceID DriverID Number Position Laps
1 12 1 22 1 53
1 12 2 14 6 53
1 12 3 1 2 53
2 13 1 22 2 57
2 13 2 14 6 57
2 13 3 1 1 57

Races

RaceID year CircuitID Name
12 2009 1 Monza
13 2013 2 Bahrain Sakhir

PitStops

RaceID DriverID Stop Lap
12 1 1 17
12 1 2 34
12 2 1 14
12 2 2 42
12 3 1 20
12 3 2 37
13 1 1 14
13 1 2 32
13 2 1 12
13 2 2 34
13 3 1 20
13 3 2 42

My desired result table would look something similar to this.

StrategyChoices

DriverRef RaceID CircuitID Name Stop Lap
Lewis 12 1 Monza 1 17
Lewis 12 1 Monza 2 34
Max 13 2 Bahrain Sakhir 1 20
Max 13 2 Bahrain Sakhir 2 42

The goal here find out what pit strategy did the winning driver use on a certain track.

SELECT ra.year, ra.name, d.properdriverref, (SELECT DISTINCT re.number FROM results WHERE re.position = 1), p.stop, p.lap, re.position
FROM pit_stops p
JOIN results re ON re.raceId = p.raceId
JOIN races ra ON p.raceId = ra.raceId
JOIN DriversXL d ON p.driverId = d.driverId    
WHERE ra.year >= 2018 AND re.position = 1

Was the code that I used and the data set returned a

DriverRef RaceID CircuitID Name Stop Lap
Lewis 12 1 Monza 1 17
Lewis 12 1 Monza 2 34
Max 12 1 Monza 1 17
Max 12 1 Monza 2 34
Alonso 12 1 Monza 1 17
Alonso 12 1 Monza 2 34
Max 13 2 Bahrain Sakhir 1 20
Max 13 2 Bahrain Sakhir 2 42
Lewis 13 2 Bahrain Sakhir 1 20
Lewis 13 2 Bahrain Sakhir 2 42
Alonso 13 2 Bahrain Sakhir 1 20
Alonso 13 2 Bahrain Sakhir 2 42

CodePudding user response:

You are missing an extra join column between pit_stop and results.

It's unclear the point of that subquery, so I have removed it

SELECT
  d.driverref,
  r.raceId,
  r.circuitId,
  ra.year,
  ra.name,
  p.stop,
  p.lap
FROM pit_stops p
JOIN results re ON re.raceId = p.raceId AND re.DriverID = p.DriverID
JOIN races ra ON p.raceId = ra.raceId
JOIN DriversXL d ON p.driverId = d.driverId    
WHERE re.position = 1;

db<>fiddle

  • Related