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 NYC81FGM11Accident · No injuriesClosedAeronca 11AC · Elizabeth, PANTSB FTW81DPD12Accident · No injuriesClosedPiper PA-31P · Denton, TXNTSB LAX81FVD11Accident · Minor injuriesClosedCessna 172 · Oakland, CANTSB ATL81FKW09Accident · Minor injuriesClosedPiper PA-32 · Nashville, TNNTSB ATL81FKM03Accident · No injuriesClosedCessna 152 · Bear Creek, NCNTSB MKC81FA024Accident · No injuriesClosedBeech F33A · Carroll, IANTSB FTW81FA034Accident · 5 fatalClosedPiper PA-28 · Bandera, TXNTSB FTW81FA033Accident · 2 fatalClosedPiper PA-38 · Del Rio, TXNTSB ATL81FA047Accident · 2 fatalClosedCessna 172N · Jenkinsville, SCNTSB ATL81FLT03Accident · No injuriesClosedPiper PA-28 · Olive Branch, MSNTSB MKC81FA017Accident · No injuriesClosedCessna 402B · Tebbetts, MONTSB DEN81FTC08Accident · No injuriesClosedBell 206B · Kenmerer, WYNTSB CHI81FER14Accident · No injuriesClosedPiper PA-23 · St.Michael, MNNTSB ATL81FA046Accident · Serious injuriesClosedBoeing 737 · Newport News, VANTSB SEA83FYM03Accident · 1 fatalClosedPiper PA-24 · Scappoose, ORNTSB MIA81FKT26Accident · Minor injuriesClosedPiper PA-32 · Opa Locka, FLNTSB CHI81FEE22Accident · No injuriesClosedPiper PA-24 · Manteno, ILNTSB ATL81FKJ10Accident · No injuriesClosedBeech V35TC · Eufaula, ALNTSB SEA81FYM18Accident · Serious injuriesClosedTeenie II · Madras, ORNTSB SEA81FYM19Accident · Minor injuriesClosedMooney M20 · Salem, ORNTSB NYC81FA025Accident · 1 fatalClosedLake LA-4 · Middleboro, MANTSB SEA81FYM17Accident · No injuriesClosedPiper PA-38 · Yamhill, ORNTSB LAX81DXQ09Accident · Minor injuriesClosedPiper PA-28 · Yerington, NVNTSB FTW81FA029Accident · 2 fatalClosedMooney M20F · Bethany, OKNTSB FTW81FQA18Accident · Minor injuriesClosedHughes 369 · Farmington, NMNTSB NYC81FA024Accident · Serious injuriesClosedBeech C-45H · Dillsburg, PANTSB LAX81FA126Accident · 1 fatalClosedBeech TC-45J · San Clement Is, CANTSB CHI81FEM09Accident · Serious injuriesClosedPiper PA-28R · Houghton, MINTSB ATL81FA041Accident · No injuriesClosedPiper PA-28R · Roebuck, SCNTSB ATL81FA040Accident · 1 fatalClosedCessna 180K · Statesboro, GANTSB MKC81FA015Accident · 1 fatalClosedBeech C23 · Willow Springs, MONTSB DCA81AA008Incident · No injuriesClosedDouglas DC-10 · Leesburg, VANTSB MIA81DKT23Accident · No injuriesClosedCessna 150 · Homestead, FLNTSB FTW81FQG10Accident · No injuriesClosedCessna 140 · Canyon, TXNTSB FTW81FQD14Accident · No injuriesClosedAero Comdr 560F · Las Cruces, NMNTSB FTW81FQD13Accident · Serious injuriesClosedCessna 150J · El Paso, TXNTSB SEA81FA018Accident · 2 fatalClosedPiper PA-28 · Port Angles, WANTSB LAX81FA042Accident · 2 fatalClosedBeech H18 · Newhall, CANTSB FTW81FQG09Accident · Minor injuriesClosedBellanca 17-30 · Crosbyton, TXNTSB DEN81FTA04Accident · Minor injuriesClosedBell 206B · Columbus, MTNTSB CHI81FEC12Accident · Minor injuriesClosedPiper PA-31P · Pontiac, MINTSB ATL81IA037Incident · No injuriesClosedCessna 414 · Jackson, TNNTSB LAX81FVM09Accident · No injuriesClosedPiper J-3 · Milpitas, CANTSB LAX81DUQ08Accident · No injuriesClosedQuickie II · Mojave, CANTSB DEN81FA017Accident · 1 fatalClosedPiper PA-28R · Wendover, UTNTSB NYC81FNA10Accident · Minor injuriesClosedPiper PA-28 · Middleboro, MANTSB NYC81DHD11Accident · Minor injuriesClosedChampion 7GCBC · Normandy Beach, NJNTSB SEA81FA017Accident · 2 fatalClosedCessna 150F · Puyallup, WANTSB FTW81DQA15Accident · No injuriesClosedEnstrom 280C · Las Vegas, NMNTSB LAX81FA039Accident · 1 fatalClosedPiper PA-31 · Mt Shasta, CA