NTSB investigations
35,889 cases where the phase of flight was Enroute.
Cases, newest first
Query with SQL
duckdb -csv -c "WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e.\"tier1Number\" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e.\"isDefiningEvent\", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e.\"tier1Number\" GLOB '[1-9][0-9]*'
AND (e.\"isDefiningEvent\" OR e.case_mkey IN (SELECT \"mKey\" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE \"isPre1982\"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o.\"phaseOfFlightCode\", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o.\"phaseOfFlightCode\"
WHERE o.aircrafts_position = 1 AND o.\"occurrenceNumber\" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c.\"eventDate\", c.\"highestInjuryLevel\" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c.\"eventDate\" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c.\"ntsbNumber\", c.\"eventDate\", c.\"eventType\", c.\"eventCity\", c.\"eventStateOrRegion\", a.n_number, a.\"aircraftMake\", a.\"aircraftModel\", c.\"highestInjuryLevel\", c.\"totalFatal\", c.\"completionStatus\", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c.\"mKey\" AND a.position = 1
WHERE c.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 400)
ORDER BY c.\"eventDate\" DESC, c.\"ntsbNumber\" DESC"Prints the whole list as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.
WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e."tier1Number" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e."isDefiningEvent", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e."tier1Number" GLOB '[1-9][0-9]*'
AND (e."isDefiningEvent" OR e.case_mkey IN (SELECT "mKey" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE "isPre1982"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o."phaseOfFlightCode", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o."phaseOfFlightCode"
WHERE o.aircrafts_position = 1 AND o."occurrenceNumber" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c."eventDate", c."highestInjuryLevel" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c."mKey" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c."eventDate" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c."ntsbNumber", c."eventDate", c."eventType", c."eventCity", c."eventStateOrRegion", a.n_number, a."aircraftMake", a."aircraftModel", c."highestInjuryLevel", c."totalFatal", c."completionStatus", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c."mKey" AND a.position = 1
WHERE c."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 400)
ORDER BY c."eventDate" DESC, c."ntsbNumber" DESCRun it at the DuckDB prompt, or in any tool that reads Parquet over HTTPS. More ways to query the release are on Use the data.
NTSB LAX81FXQ20Accident · Serious injuriesClosedCessna T210F · S.Lake Tahoe, CANTSB CHI81FEK19Accident · No injuriesClosedHiller UH-12D · Junction City, OHNTSB ATL81IA082Incident · No injuriesClosedGrum Amer AA-5A · Clarksburg, WVNTSB SEA81FYP22Accident · No injuriesClosedCessna 152 · Pasco, WANTSB DEN81FA043Accident · 3 fatalClosedBeech C24R · Leadville, CONTSB SEA81FA040Accident · 1 fatalClosedPiper PA-24 · Riverside, ORNTSB CHI81DER43Accident · Minor injuriesClosedCessna 188A · Wabasso, MNNTSB CHI81DEP22Accident · No injuriesClosedBell 47G-5 · Coloma, WINTSB MIA81FKT78Accident · No injuriesClosedCessna 210N · Key Largo, FLNTSB MIA81FA083Accident · 1 fatalClosedAero Comdr 500 · Flagler Beach, FLNTSB FTW81DRG41Accident · No injuriesClosedCessna 340 · Austin, TXNTSB FTW81DRG40Accident · No injuriesClosedBell 47G-4 · Eagle Pass, TXNTSB ANC81FA062Accident · No injuriesClosedCessna 172 · Napaskiak, AKNTSB SEA81DYE31Accident · Minor injuriesClosedHiller UN-12D · Castle Rock, WANTSB MIA81FKT74Accident · No injuriesClosedPiper PA-28 · Ft.Lauderdale, FLNTSB FTW81FQA35Accident · Serious injuriesClosedPiper PA-28 · Pecos, NMNTSB CHI81FA064Accident · 2 fatalClosedBrantley B2B · Chesterton, INNTSB DEN81FA040Accident · 1 fatalClosedCessna 150 · Hot Srings, SDNTSB FTW81DRJ18Accident · No injuriesClosedGrumman G-164A · Bonita, LANTSB DEN81FTC17Accident · Minor injuriesClosedCessna TR182 · Cheyenne, WYNTSB ATL81FIG11Accident · Minor injuriesClosedBellanca 17-30 · Royal Oak, MDNTSB SEA83FA056Accident · 2 fatalClosedCessna 170 · Azalea, ORNTSB NYC81IA054Accident · Serious injuriesClosedPiper PA-28 · Skullville, NJNTSB MIA81DLA28Accident · Minor injuriesClosedBellanca 7GCBC · New Smyrna Bch, FLNTSB MIA81DKT49Accident · No injuriesClosedCessna 150 · Key Largo, FLNTSB LAX81FA096Accident · 1 fatalClosedCessna 172M · Crescent City, CANTSB FTW81DQA33Accident · Minor injuriesClosedCessna 172 · Luna, NMNTSB DEN81FTM28Accident · Minor injuriesClosedCessna 210 · Kanab, UTNTSB DEN81FTM26Accident · No injuriesClosedPiper PA-28 · Thistle, UTNTSB SEA81DYM27Accident · No injuriesClosedCessna 150 · Astoria, ORNTSB MIA81FLD50Accident · No injuriesClosedPiper PA-31 · Fort Myers, FLNTSB LAX81DVG44Accident · No injuriesClosedCessna 180 · Redding, CANTSB CHI81IA088Accident · Serious injuriesClosedBoeing 727 · Columbus, OHNTSB MKC81FCQ39Accident · No injuriesClosedPiper PA-24 · Emporia, KSNTSB CHI81FEI20Accident · Serious injuriesClosedCessna 172 · Akron, OHNTSB ATL81DLJ07Accident · Minor injuriesClosedPiper PA-28 · Windsor, NCNTSB FTW81FRD27Accident · Minor injuriesClosedBell 206B · Plaquemire, LANTSB NYC81IA053Incident · Serious injuriesClosedAirbus A300 · Charleston, SCNTSB MIA81DA082Accident · Minor injuriesClosedBrittnorman BN-2A · Nassau (Atlantic Ocean)NTSB FTW81IA099Incident · No injuriesClosedAerospatial AS350D · Gulf Of Mexico (Atlantic Ocean)NTSB FTW81DRG44Accident · No injuriesClosedPiper PA-24 · Belton, TXNTSB FTW81DRD26Accident · No injuriesClosedGrumman G-164A · Iowa, LANTSB LAX81FUQ22Accident · 1 fatalClosedBede BD-4 · Pacoima, CANTSB DEN81FTK10Accident · 2 fatalClosedPiper PA-18 · Dallas, SDNTSB SEA81FA039Accident · 1 fatalClosedMaule M5235C · Dixie, IDNTSB CHI81FEI19Accident · No injuriesClosedPitts S-1E · Medina, OHNTSB LAX81FA094Accident · 1 fatalClosedCessna 170A · Homeland, CANTSB DEN81FTG10Accident · No injuriesClosedGrumman G-164A · Edinberg, NDNTSB DEN81FTE41Accident · No injuriesClosedGrumman AA-5A · Bennett, CONTSB ANC81DAG38Accident · No injuriesClosedCessna 182A · Willow, AK