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 NYC81FA052Accident · 2 fatalClosedBell 206B · Montrose, NYNTSB LAX81FA093Accident · 6 fatalClosedSikorsky S-55 · Beaumont, CANTSB ATL81FA079Accident · 3 fatalClosedCessna 182 · Elizabethton, TNNTSB MKC81FA037Accident · Minor injuriesClosedCessna 210N · Olathe, KSNTSB FTW81FQD25Accident · Minor injuriesClosedCessna 402 · Cliff, NMNTSB MKC81FCG36Accident · No injuriesClosedBell 47J-2 · Branson, MONTSB MKC81FCG35Accident · No injuriesClosedCessna 152 · Vibbard, MONTSB FTW81FQG29Accident · Minor injuriesClosedPiper PA-25 · New Deal, TXNTSB FTW81DQD24Accident · No injuriesClosedPitts SC-1 · Carlsbad, NMNTSB CHI81FEP19Accident · No injuriesClosedPiper PA-12 · Spring Green, WINTSB CHI81FEE33Accident · 1 fatalClosedSonerai 1 · Cortland, ILNTSB ANC81FA055Accident · Minor injuriesClosedHughes 369D · Glennallen, AKNTSB LAX81FA090Accident · 1 fatalClosedCessna T207A · Grand Canyon, AZNTSB FTW81FPJ26Accident · Serious injuriesClosedPiper PA-28R · Carnegie, OKNTSB ATL81DLQ17Accident · No injuriesClosedAero Sport Scamp · Ashland, KYNTSB MKC81FCQ34Accident · Minor injuriesClosedCessna 177RG · Newton, KSNTSB ATL81FKM11Accident · Serious injuriesClosedTaylorcraft BC-12D · Indian Trail, NCNTSB ATL81FA076Accident · 1 fatalClosedCessna 182 · Louisville, KYNTSB FTW81DQG28Accident · No injuriesClosedPiper PA-28 · Dalhart, TXNTSB DEN81FTE38Accident · Minor injuriesClosedCessna 172N · Frisco, CONTSB MIA81DKJ07Accident · No injuriesClosedBellanca 7GCAA · Panama City, FLNTSB DEN81FA036Accident · 1 fatalClosedCessna T210M · Aspen, CONTSB CHI81FER38Accident · Minor injuriesClosedMcculloch J-2 · Owatonna, MNNTSB LAX81FUJ63Accident · Minor injuriesClosedBeech H35 · Winslow, AZNTSB LAX81DXQ18Accident · No injuriesClosedEiriavion PIK-20 · Minden, NVNTSB FTW81DPD24Accident · No injuriesClosedMooney M20C · Gordon, TXNTSB ANC81DAG35Accident · No injuriesClosedStinson 108-3 · Homer, AKNTSB SEA81FA035Accident · 2 fatalClosedBell 47G-4A · Aberdeen, WANTSB LAX81FUG34Accident · Minor injuriesClosedBellanca 7KCAB · Chino, CANTSB LAX81FA088Accident · 1 fatalClosedCessna 172M · Tehachape, CANTSB LAX81DXQ17Accident · Minor injuriesClosedCessna 152 · Truckee, CANTSB FTW81DQD23Accident · No injuriesClosedAeronca 7BCM · Las Cruces, NMNTSB FTW81DA093Accident · 2 fatalClosedGrumman G-164B · Danbury, TXNTSB CHI81FER37Accident · No injuriesClosedPiper PA-28R · Detroit Lakes, MNNTSB FTW81DA092Accident · Serious injuriesClosedDouglas DC-9 · New Orleans, LANTSB SEA81DYP17Accident · No injuriesClosedSchleicher KA8B · Wenatchee, WANTSB MIA81DA077Accident · No injuriesClosedPiper PA-31 · Grand Cayman, Burkina FasoNTSB LAX81DVD23Accident · Serious injuriesClosedPiper PA-28R · Livermore, CANTSB DEN81FA037Accident · 2 fatalClosedBeech A-35R · Beaver, UTNTSB NYC81FHD23Accident · No injuriesClosedCessna 172N · Elmer, NJNTSB FTW81FA091Accident · 3 fatalClosedCessna 172RG · Grants, NMNTSB ATL81FA077Accident · 2 fatalClosedPiper PA-28R · Huttonville, WVNTSB LAX81FVG33Accident · Serious injuriesClosedCessna 182K · Hornbrook, CANTSB LAX81FVG32Accident · No injuriesClosedPiper PA-25 · Durham, CANTSB MIA81FA072Accident · No injuriesClosedMitsubishi MU-2 · Miami, FLNTSB FTW81FRA30Accident · Minor injuriesClosedHughes 269C · Houston, TXNTSB FTW81DRD24Accident · Serious injuriesClosedBell 206B · Cameron, LANTSB DEN81FTE44Accident · 1 fatalClosedTailwind W81 · Ramah, CONTSB SEA81DYE29Accident · No injuriesClosedPiper J-3 · Bainbridge Isl, WANTSB NYC81IA048Incident · No injuriesClosedDehavilland DHC-6 · Unity, ME