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 LAX80DVG39Accident · Minor injuriesClosedHughes 369D · Yountville, CANTSB LAX80DVA41Accident · No injuriesClosedCessna 152 · Selma, CANTSB FTW80IA075Incident · No injuriesClosedHughes 369 · Gulf Of Mexico (Gulf of Mexico)NTSB ANC80DAD06Accident · Minor injuriesClosedStinson 108-3 · Wrangell, AKNTSB FTW80FRA27Accident · No injuriesClosedCessna 182 · Bay City, TXNTSB FTW80FQA27Accident · Serious injuriesClosedDehavilland DH82A · Carrizozo, NMNTSB ATL80FLA03Accident · No injuriesClosedBrantley B-2B · Valdosta, GANTSB ATL80FA045Accident · 1 fatalClosedCessna 150 · Pikeville, KYNTSB NYC80FA040Accident · 4 fatalClosedCessna 411 · Vineland, NJNTSB FTW80FPA11Accident · No injuriesClosedCessna 152 · Bellmead, TXNTSB DEN80FA032Accident · No injuriesClosedBell 206B · Brighton, UTNTSB LAX80FVG37Accident · Serious injuriesClosedCessna 172E · Roseville, CANTSB LAX80FVW16Accident · No injuriesClosedCessna 182 · Las Vegas, NVNTSB LAX80DUJ56Accident · Minor injuriesClosedCessna TU206G · Parker, AZNTSB ANC80FA044Accident · Serious injuriesClosedBell 206B · Cold Bay, AKNTSB FTW80FQA26Accident · Serious injuriesClosedPiper PA-28 · Cimarron, NMNTSB FTW80FA069Accident · 2 fatalClosedBell 206L-1 · Gibson, LANTSB LAX80DXQ27Accident · No injuriesClosedHiller Acft UH-12E · Alleghany, CANTSB FTW80DRJ17Accident · No injuriesClosedCessna 152 · Shreveport, LANTSB ATL80F1A06Accident · Serious injuriesClosedPiper PA-28 · Front Royal, VANTSB MKC80FCQ14Accident · Minor injuriesClosedBucker Jung BU131 · Colwich, KSNTSB MIA80DKT40Accident · No injuriesClosedCessna 206 · 90 Sw Key West, FLNTSB LAX80FA094Accident · 4 fatalClosedPiper PA-28 · Lk Roosevelt, AZNTSB LAX80DVA38Accident · No injuriesClosedRyan Navion · Turlock, CANTSB FTW80FRA28Accident · Minor injuriesClosedCessna 150L · Splendora, TXNTSB CHI80FEM24Accident · No injuriesClosedLightizer Lakes · Grand Haven, MINTSB CHI80FEC17Accident · No injuriesClosedCessna 150K · Imlay City, MINTSB ANC80DAG47Accident · Serious injuriesClosedPiper PA-18 · Bethel, AKNTSB MIA80DLD65Accident · No injuriesClosedCessna 337 · Homosassa Spgs, FLNTSB LAX80FA093Accident · 2 fatalClosedRobinson R22 · Rnch Palos Vrd, CANTSB LAX80DUG32Accident · Minor injuriesClosedCessna 152 · Banning, CANTSB LAX80DVA37Accident · No injuriesClosedPiper PA-25 · Delano, CANTSB FTW80FRG40Accident · No injuriesClosedCessna 206F · Orange Grove, TXNTSB CHI80FER38Accident · No injuriesClosedPiper PA-22 · Hoffman, MNNTSB NYC80FA038Accident · 3 fatalClosedCessna 177RG · Peterborough, NHNTSB FTW80FRG50Accident · Minor injuriesClosedCessna 177RG · Raymondville, TXNTSB LAX80FVG36Accident · No injuriesClosedHughes 369HS · Georgetown, CANTSB FTW80FQG17Accident · Minor injuriesClosedCessna 152 · Pampa, TXNTSB MIA80DKA08Accident · No injuriesClosedPiper PA-32 · Culebra Island, PRNTSB FTW80DQG16Accident · No injuriesClosedCessna 172RG · Snyder, TXNTSB LAX80FA090Accident · 1 fatalClosedPiper PA-28R · Newhall, CANTSB LAX80FA089Accident · 1 fatalClosedCessna 172 · Cima, CANTSB FTW80FA067Accident · 1 fatalClosedBeech S35 · Board Camp, ARNTSB CHI80FEX15Accident · Minor injuriesClosedPiper PA-28R · Franklin, INNTSB CHI80FEC15Accident · No injuriesClosedCessna 150L · Troy, MINTSB LAX80DUG31Accident · No injuriesClosedWeatherly 201B · Blythe, CANTSB IAD80FLJ12Accident · Minor injuriesClosedCessna 182 · Henderson, NCNTSB FTW80FRD25Accident · No injuriesClosedGrumman G-164A · Lake Arthur, LANTSB CHI80FEM23Accident · Minor injuriesClosedCessna 177RG · Dorr, MINTSB ANC80DA042Accident · No injuriesClosedBellanca 8GCBC · Kodiak, AK