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 MIA80FA104Accident · 3 fatalClosedDouglas DC-6B · Haiti-In Ocean (Atlantic Ocean)NTSB MIA80DLE01Accident · No injuriesClosedCessna 172 · Kissimmee, FLNTSB LAX80DUK03Accident · No injuriesClosedCessna I77RG · Kingman, AZNTSB FTW80DA115Accident · No injuriesClosedPiper PA-32 · Shedidan, ARNTSB SEA80FYA25Accident · Serious injuriesClosedBreezy RLU-1F · Jerome, IDNTSB FTW80FQA39Accident · Minor injuriesClosedPiper PA-15 · Fort Sumner, NMNTSB ANC80FA101Accident · 3 fatalClosedCessna 172M · Lime Peak, AKNTSB DEN80FTE79Accident · No injuriesClosedCessna TU206 · Hayden, CONTSB CHI80FEM46Accident · No injuriesClosedBeech A35 · Lincoln, MINTSB ATL80DKJ29Accident · No injuriesClosedCessna 182M · Iron City, ALNTSB SEA81FYP38Accident · Serious injuriesClosedHughes 369D · Newport, WANTSB MIA80DA102Accident · Serious injuriesClosedLockheed L1011 · Nassau (Atlantic Ocean)NTSB CHI80FEX34Accident · Minor injuriesClosedGrumman AA-5A · Jeffersonville, INNTSB ATL80FIJ11Accident · No injuriesClosedHiller UH-12E · Beverly, WVNTSB SEA80FA048Accident · 2 fatalClosedCessna T210L · Dillon, MTNTSB MKC80FA056Accident · 2 fatalClosedCessna T210N · Summit, SDNTSB LAX80FUJ99Accident · No injuriesClosedCessna TR182 · New River, AZNTSB ATL80FIA15Accident · No injuriesClosedBeech B24R · Boyce, VANTSB MIA80OLD99Accident · No injuriesClosedBeech H35 · Gulf Of Mexico (Gulf of Mexico)NTSB ATL80IA093Incident · No injuriesClosedDouglas DC-9 · Norfolk, VANTSB FTW80DPD46Accident · No injuriesClosedCessna 152 · Roanoke, TXNTSB CHI80FEE50Accident · No injuriesClosedCessna 152 · Aurora, ILNTSB ATL81FKJ28Accident · Minor injuriesClosedGrumman G-164 · Bay Minette, ALNTSB MKC80FCG46Accident · No injuriesClosedCessna 150 · Desoto, KSNTSB MKC80FA054Accident · 4 fatalClosedBeech V35 · Jackson, WYNTSB FTW80FRJ39Accident · No injuriesClosedCessna 150K · Shreveport, LANTSB DEN80FTC30Accident · Serious injuriesClosedCessna 210K · Jackson, WYNTSB DEN80DTI15Accident · No injuriesClosedCessna 180 · Raynesford, MTNTSB CHI80FEP53Accident · Serious injuriesClosedBell 206 · Grafton, WINTSB LAX80FUA22Accident · No injuriesClosedBell 47G-3B · Bellflower, CANTSB CHI80FEG22Accident · No injuriesClosedPiper PA-28 · Germantown, OHNTSB MKC80FA053Accident · 2 fatalClosedTaylorcraft BC12-D · Sedan, KSNTSB FTW80DPG64Accident · No injuriesClosedCessna T210M · Cotter, ARNTSB CHI80FEM45Accident · No injuriesClosedCessna 172L · Chesaning, MINTSB CHI80FEC34Accident · No injuriesClosedCessna 152 · North Adams, MINTSB ATL80FKG24Accident · Serious injuriesClosedCessna 172N · Atlanta, GANTSB ATL80FA090Accident · 1 fatalClosedCessna 172 · Milledgeville, GANTSB ATL80FLG19Accident · Minor injuriesClosedCessna 172M · Manning, SCNTSB SEA80DYK17Accident · Minor injuriesClosedCessna 150 · Redmond, ORNTSB LAX80FUJ95Accident · Minor injuriesClosedPiper PA-28R · Lakeside, AZNTSB DEN80FA061Accident · 1 fatalClosedBell 206B · Grassy Butte, NDNTSB LAX80FVA66Accident · No injuriesClosedSnow 600S2R · Lemoore, CANTSB FTW80FA112Accident · No injuriesClosedAerospatial AS350 · Patterson, LANTSB ATL80FKG22Accident · No injuriesClosedPiper PA-38 · Jefferson, GANTSB MKC80FA051Accident · Minor injuriesClosedIsreal Ind. 1124 · Iowa City, IANTSB CHI80FEP52Accident · No injuriesClosedCessna 180 · Bevent, WINTSB ANC80FA096Accident · 2 fatalClosedBellanca 8GCBC · Glenallen, AKNTSB SEA81FYM07Accident · No injuriesClosedHughes 269C · Pilot Rock, ORNTSB SEA80FA045Accident · 4 fatalClosedCessna 182Q · Skykomish, WANTSB NYC80FA080Accident · 2 fatalClosedPiper PA-28 · Herkimer, NY