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 LAX81FUA01Accident · Minor injuriesClosedCessna A152 · Yorba Linda, CANTSB ANC81DAA02Accident · Minor injuriesClosedCessna 180 · Arctic Village, AKNTSB FTW81FRG03Accident · No injuriesClosedPiper PA-28R · Kenedy, TXNTSB CHI81FEE02Accident · Minor injuriesClosedCessna R182 · Chicago, ILNTSB MKC81FA001Accident · No injuriesClosedCessna 337A · Springfield, MONTSB FTW81DQD01Accident · No injuriesClosedBoeing B75 · Hachita, NMNTSB CHI81FEE01Accident · Serious injuriesClosedPiper PA-28 · Huntley, ILNTSB LAX81FJA01Accident · No injuriesClosedBeech 3NM · Hilo, HINTSB LAX81DXQ01Accident · No injuriesClosedHiller Acft UH-12E · Quincy, CANTSB LAX80FVD01Accident · No injuriesClosedPiper PA-24 · Lodi, CANTSB MIA80FA114Accident · 2 fatalClosedPiper PA-23 · Chattahoochee, FLNTSB LAX81OA021Accident · 2 fatalClosedPiper PA-31 · Magdelena, MexicoNTSB LAX81FA001Accident · 2 fatalClosedHughes 369HS · Pacific Ocean (Pacific Ocean)NTSB SEA80FYP42Accident · No injuriesClosedBensen B-8M · Quincy, WANTSB DEN80FTA23Accident · No injuriesClosedPiper PA-28 · Billings, MTNTSB SEA80FYM63Accident · No injuriesClosedCessna 182A · Harrisburg, ORNTSB NYC81FA005Accident · 1 fatalClosedCessna 210 · Newport, RINTSB NYC80FFA26Accident · No injuriesClosedSchreder HP-14 · Lake Placid, NYNTSB MIA80FA113Accident · 2 fatalClosedPiper PA-23 · Delray Beach, FLNTSB LAX80FVD38Accident · No injuriesClosedPiper PA-18 · Castro Valley, CANTSB LAX80DUG60Accident · Minor injuriesClosedPiper PA-15 · Needles, CANTSB NYC80FFA25Accident · 1 fatalClosedOsprey II · Kingston, NYNTSB MKC80FCD33Accident · No injuriesClosedHughes 269C · Iowa City, IANTSB NYC80FGM33Accident · Minor injuriesClosedCessna T210F · Economy Boro, PANTSB FTW80FA122Accident · 2 fatalClosedCessna 150L · Hendrix, OKNTSB DEN80FTM41Accident · Serious injuriesClosedCessna 172 · Heber, UTNTSB NYC80FA091Accident · No injuriesClosedBell 47G-4A · Holbrook, PANTSB MIA80FA109Accident · 2 fatalClosedCessna 150M · South Bay, FLNTSB FTW80DA121Accident · No injuriesClosedBell 206L-1 · Creole, LANTSB DEN80FTM40Accident · No injuriesClosedPiper PA-28 · Kamas, UTNTSB MKC80FA058Accident · 1 fatalClosedCessna 172M · Cassoday, KSNTSB MIA80IA108Incident · No injuriesClosedBeech B99 · Orlando, FLNTSB FTW80DRJ44Accident · No injuriesClosedCessna 172C · Rocky Branch, LANTSB MIA80FA112Accident · 1 fatalClosedCambell 47-D1G · Panama City, FLNTSB MKC80DCQ34Accident · No injuriesClosedCessna 150 · Mcpherson, KSNTSB LAX80FUG59Accident · Minor injuriesClosedRobinson R22 · Banning, CANTSB LAX80DXQ40Accident · No injuriesClosedPitts S-1E · Warm Spgs Vly, NVNTSB FTW80FRG73Accident · Minor injuriesClosedStinson 108-3 · Junction, TXNTSB FTW80FQD16Accident · No injuriesClosedPiper PA-38 · El Paso, TXNTSB FTW80DRJ43Accident · Minor injuriesClosedBLN Works FF-7 · Tyler, TXNTSB ATL80FKG30Accident · Minor injuriesClosedPiper PA-25 · Claxton, GANTSB FTW80FPA19Accident · Serious injuriesClosedAero Comdr 680F · Addison, TXNTSB FTW80FA118Accident · 2 fatalClosedPiper PA-32 · Smithfield, TXNTSB ATL80FKG28Accident · Minor injuriesClosedPiper PA-23 · Cartersville, GANTSB ANC81DAG17Accident · Serious injuriesClosedPiper PA-11 · Kenai, AKNTSB MIA80FA106Accident · 4 fatalClosedCessna 182 · Rio Grande, PRNTSB FTW80FQG42Accident · Minor injuriesClosedBoeing E-75 · Snyder, TXNTSB FTW80FQG41Accident · Minor injuriesClosedCessna 152 · Clairemont, TXNTSB ATL80IA098Incident · No injuriesClosedConvair 440 · Brunswick, GANTSB ANC81DAG02Accident · No injuriesClosedDehavilland DHC-2 · Twin Lakes, AK