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 FTW81DPD37Accident · Minor injuriesClosedRockwell 114 · Woodson, TXNTSB ATL81FKW24Accident · Serious injuriesClosedBensen B8 · Hixson, TNNTSB NYC81FA077Accident · 1 fatalClosedRepublic RC-3 · Greenfield, MENTSB LAX81FA121Accident · 6 fatalClosedPiper PA-32R · Grand Canyon, AZNTSB CHI81FA091Accident · 3 fatalClosedMooney M20J · La Pointe, WINTSB SEA81FA053Accident · 3 fatalClosedSoloy UH-12E · Riggins, IDNTSB LAX81FVA58Accident · Serious injuriesClosedBede BD-4 · Chowchilla, CANTSB CHI81FEM37Accident · No injuriesClosedPiper PA-28 · Cheboygan, MINTSB LAX81FVM26Accident · No injuriesClosedCessna 310C · Paso Robles, CANTSB FTW81FPA18Accident · No injuriesClosedRobinson R22 · Corsicana, TXNTSB CHI81FEE50Accident · Minor injuriesClosedCessna 152 · Chicago, ILNTSB MKC81FCD36Accident · Minor injuriesClosedPietenpol Aircmp · Blakesburg, IANTSB LAX81FVW16Accident · Minor injuriesClosedErco 415-D · Indian Springs, NVNTSB ANC81DAG87Accident · No injuriesClosedBellanca 7AC · Iliamna, AKNTSB FTW81FQG53Accident · No injuriesClosedVarieze 01 · Lubbock, TXNTSB DEN81FTM38Accident · Minor injuriesClosedCessna 172 · Spring City, UTNTSB ANC81DAG66Accident · Serious injuriesClosedBellanca 7GCAA · Sterling, AKNTSB DEN81FTI15Accident · Serious injuriesClosedCessna 172N · Libby, MTNTSB DEN81FTE63Accident · Minor injuriesClosedLuscombe 8A · Byers, CONTSB CHI81FEC40Accident · No injuriesClosedPiper PA-22 · Lapeer, MINTSB CHI81FA087Accident · No injuriesClosedCessna 210D · Zanesville, OHNTSB ATL81DKJ30Accident · No injuriesClosedCessna 150M · Hamilton, ALNTSB CHI81FA086Accident · 3 fatalClosedPiper PA-28 · Altamont, ILNTSB LAX81DUQ29Accident · Serious injuriesClosedQuickie 1 · Lake Hughes, CANTSB ATL81FLA12Accident · No injuriesClosedCessna 404 · St Simons Is, GANTSB MIA81IA103Incident · No injuriesClosedLockheed L-1011 · Ft.Lauderdale, FLNTSB LAX81FUG46Accident · No injuriesClosedBeech K35 · Temecula, CANTSB FTW81DQG49Accident · No injuriesClosedPiper PA-25 · Littlefield, TXNTSB ANC81FA094Accident · 1 fatalClosedPiper PA-18 · Port Moller, AKNTSB NYC81FFJ23Accident · No injuriesClosedCessna 337A · Pembroke, NYNTSB MIA81DLA31Accident · Serious injuriesClosedBellanca 8GCBC · Ormond Beach, FLNTSB LAX81FA115Accident · 1 fatalClosedLake LA-4 · Hilo, HINTSB DEN81FTM39Accident · 1 fatalClosedPiper PA-28 · Ferron, UTNTSB CHI81FEM33Accident · 3 fatalClosedVarieze RAF · Holland, MINTSB SEA81FYA21Accident · No injuriesClosedPiper PA-25 · Middleton, IDNTSB LAX81FVA57Accident · Minor injuriesClosedFlowers PDG · Madera, CANTSB FTW81FPM18Accident · No injuriesClosedPiper PA-28R · Jay, OKNTSB CHI81FEP41Accident · No injuriesClosedDehavilland DHC-1 · Mequon, WINTSB CHI81FEG15Accident · No injuriesClosedRobinson R22 · Cincinnati, OHNTSB ATL82FA107Accident · 2 fatalClosedCessna 182 · Berryville, VANTSB MKC81FA049Accident · Serious injuriesClosedFairchild 24R · Waukon, IANTSB LAX81FVG58Accident · No injuriesClosedRockwell S-2R · Clarksburg, CANTSB FTW81FQG48Accident · Serious injuriesClosedBede BD-5J · Pampa, TXNTSB CHI81FEE48Accident · No injuriesClosedPorterfield 35-70 · Rockford, ILNTSB ATL81FIG12Accident · No injuriesClosedChampion 7GCAA · Ocean City, MDNTSB ANC81FAA23Accident · No injuriesClosedCessna 152 · Northway, AKNTSB ANC81DAG59Accident · Minor injuriesClosedAeronca 15AC · Anchorage, AKNTSB FTW81FPD33Accident · No injuriesClosedGrumman AA-1B · Lake Dallas, TXNTSB DEN81FTG17Accident · No injuriesClosedCessna 152 · Bismarck, NDNTSB ATL81DKG38Accident · No injuriesClosedCessna A188B · Pitts, GA