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 LAX82FA014Accident · 1 fatalClosedBell 206B · Napa, CANTSB ATL81FLG01Accident · Minor injuriesClosedPiper PA-23 · Georgetown, SCNTSB NYC82FA008Accident · 1 fatalClosedPiper PA-28 · North Hudson, NYNTSB NYC81FNC01Accident · Minor injuriesClosedCessna 180 · Millinocket, MENTSB LAX82FA012Accident · 2 fatalClosedRobinson R22 · Livermore, CANTSB FTW82DQG09Accident · No injuriesClosedCessna 177 · Canadian, TXNTSB ATL82FKJ06Accident · Serious injuriesClosedCessna 150 · Russellville, ALNTSB DEN82FTI07Accident · No injuriesClosedBeech 35-C33 · Dillion, MTNTSB ATL82FLJ03Accident · 1 fatalClosedDabbs B8M · Garland, NCNTSB ANC82FA007Accident · 1 fatalClosedAero Comdr 680E · Savoonga, AKNTSB ANC82FA006Accident · 2 fatalClosedCessna 207 · Skwentna, AKNTSB MKC82FCG06Accident · Minor injuriesClosedPiper PA-28R · Macomb, MONTSB LAX82FA011Accident · 1 fatalClosedCessna 152 · Avondale, AZNTSB FTW82DPD03Accident · No injuriesClosedCessna 182 · Ranger, TXNTSB DEN82FTM02Accident · No injuriesClosedSoloy 47 · Fruitland, UTNTSB CHI82FA011Accident · Serious injuriesClosedPiper PA-23 · Niles, OHNTSB NYC82DFJ05Accident · No injuriesClosedPiper PA-22 · Fulton, NJNTSB MKC82FCA02Accident · Minor injuriesClosedCessna 172 · Piedmont, MONTSB ATL82FKJ05Accident · No injuriesClosedBeech 3NM · Ohatchee, ALNTSB LAX82FJA02Accident · Serious injuriesClosedPiper PA-32 · Lanai City, HINTSB FTW82FPD02Accident · No injuriesClosedPiper PA-34 · Henrietta, TXNTSB ATL82FA013Accident · 2 fatalClosedHughes 269A · Elizabethton, TNNTSB MKC82FA004Accident · 2 fatalClosedBeech G33 · Rushville, MONTSB MIA82DLA03Accident · No injuriesClosedCessna A188B · Carrabelle, FLNTSB DEN82FTI05Accident · Minor injuriesClosedPiper PA-30 · Sheridan, MTNTSB SEA82DYK03Accident · Minor injuriesClosedBeech 76 · Sutherlin, ORNTSB LAX82DUJ15Accident · No injuriesClosedCessna 150 · Lk Havasu Cy, AZNTSB DEN82FTE06Accident · No injuriesClosedBell 206B · Colorado Spgs, CONTSB ATL82FLJ02Accident · Serious injuriesClosedPiper PA-24 · Chapel Hill, NCNTSB MIA82FKJ01Incident · No injuriesClosedPiper PA-23 · Pensacola, FLNTSB FTW82DPG02Accident · Serious injuriesClosedCessna 177B · Crossett, ARNTSB DEN82FA005Accident · 3 fatalClosedPiper PA-28 · Provo, UTNTSB LAX82FA009Accident · 3 fatalClosedCessna 310R · Elsinore, CANTSB CHI82FER07Accident · No injuriesClosedCessna 150 · Menahga, MNNTSB FTW82FRG05Accident · Serious injuriesClosedPiper PA-22 · Rio Hondo, TXNTSB FTW82FA015Accident · 2 fatalClosedCessna 150G · Broaddus, TXNTSB DEN82FTI02Accident · No injuriesClosedBell 206B · Whitehall, MTNTSB CHI82FA008Accident · 2 fatalClosedPiper PA-28 · Mooresville, INNTSB CHI82FEC05Accident · Serious injuriesClosedPiper PA-22 · Howell, MINTSB FTW82DA014Accident · Serious injuriesClosedBoeing 727 · Dfw Airport, TXNTSB CHI82DEV03Accident · No injuriesClosedBeech B19 · Savoy, ILNTSB LAX82FA005Accident · 1 fatalClosedBell 205A-1 · Fremont, CANTSB LAX82FA004Accident · 3 fatalClosedPiper PA-28R · Tehachapi, CANTSB ATL82FKQ05Accident · No injuriesClosedCessna 177RG · Pascagoula, MSNTSB ATL82DID01Accident · No injuriesClosedBeech 77 · Boones Mill, VANTSB MIA82DKA02Accident · Serious injuriesClosedCessna 172 · Ponce, PRNTSB FTW82FRA02Accident · No injuriesClosedPiper PA-24 · New Caney, TXNTSB DEN82FA003Accident · Minor injuriesClosedAerospatial SA315B · Springville, UTNTSB CHI82DER05Accident · No injuriesClosedPiper PA-28 · New York Mills, MNNTSB ATL82FA009Accident · 3 fatalClosedHelio H-295 · Hazard, KY