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 LAX80FVM40Accident · Serious injuriesClosedPiper PA-18 · San Francisco, CANTSB LAX80FUA20Accident · Minor injuriesClosedBeech T-34B · Newport Beach, CANTSB LAX80DVA65Accident · No injuriesClosedCessna 152 · Coalinga, CANTSB ANC81DAG14Accident · Minor injuriesClosedMooney M20F · Palmer, AKNTSB CHI80FA066Accident · 1 fatalClosedPiper PA-28 · Antigo, WINTSB SEA80FYP36Accident · No injuriesClosedPiper PA-38 · Stratford, WANTSB NYC80FNA25Accident · No injuriesClosedN American T-28 · Dedham, MANTSB CHI80FEK26Accident · No injuriesClosedCessna U206F · Rockford, OHNTSB NYC80IA077Incident · No injuriesClosedCessna 172 · Rochester, NYNTSB MIA80FLD93Accident · Minor injuriesClosedSikorsky S-55B · Titusville, FLNTSB MIA80FKT56Accident · Minor injuriesClosedBeech 60 · Pompano Beach, FLNTSB CHI80FEC32Accident · Minor injuriesClosedPiper PA-28 · Plymouth, MINTSB ANC80DAH02Accident · No injuriesClosedCessna 207 · Paimuit, AKNTSB NYC80FFJ14Accident · No injuriesClosedCessna 177RG · Canandaigua, NYNTSB FTW80DRA49Accident · No injuriesClosedBell 206L1 · Gulf Coast, TXNTSB SEA80FYK15Accident · No injuriesClosedPiper PA-28R · Sixes, ORNTSB CHI80DAMS3Accident · 1 fatalClosedCessna 182G · Ludington, MINTSB LAX80FUW01Accident · 1 fatalClosedLockheed 382 · Otay, CANTSB NYC80FA075Accident · 1 fatalClosedPiper PA-18 · Exeter, RINTSB DEN80FTE73Accident · No injuriesClosedBell 206B · Byers, CONTSB MKC80FCQ31Accident · No injuriesClosedCessna 177B · Dodge City, KSNTSB NYC80FGT19Accident · No injuriesClosedHughes 269C · Renova, PANTSB NYC80FGM27Accident · Minor injuriesClosedPiper PA-31 · Windber, PANTSB ANC80FA087Accident · 4 fatalClosedCessna 340A · Petersburg, AKNTSB CHI80FEX31Accident · No injuriesClosedHiller Acft UH-12E · Milan, INNTSB NYC80FHA28Accident · Minor injuriesClosedCessna 172 · Perkasia, PANTSB SEA80DYM53Accident · No injuriesClosedAero Comdr 100 · Prineville, ORNTSB MKC80FA049Accident · Serious injuriesClosedPiper PA-28R · Omaha, NENTSB DEN80FA054Accident · 1 fatalClosedPiper PA-24R · Jackson, WYNTSB NYC80FNC36Accident · Minor injuriesClosedBeech A36 · Laconia, NHNTSB NYC80DNA22Accident · No injuriesClosedStinson 108-2 · Quonset, RINTSB FTW80FQA42Accident · Serious injuriesClosedCessna 150J · Amalie, NMNTSB FTW80FQA41Accident · Minor injuriesClosedCessna T337P · Santa Rosa, NMNTSB FTW80DPD41Accident · No injuriesClosedPiper PA-28 · Abilene, TXNTSB LAX80FVG66Accident · No injuriesClosedCessna 337B · Marysville, CANTSB LAX80FA135Accident · 4 fatalClosedCessna T210 · Truckee, CANTSB CHI80FET24Accident · No injuriesClosedGrumman G-164 · Howe, INNTSB FTW80FRD56Accident · Serious injuriesClosedCessna 150 · Sulphur, LANTSB ANC81DAG19Accident · Serious injuriesClosedAero Comdr 100 · King Salmon, AKNTSB MIA80FKT53Accident · Serious injuriesClosedCessna 150 · Bahia Honda, FLNTSB FTW80DRG63Accident · No injuriesClosedCessna 210C · Corpus Christi, TXNTSB SEA80FYK13Accident · Minor injuriesClosedCessna 421 · Redmond, ORNTSB SEA80FA043Accident · 2 fatalClosedPiper J4E · Mountain Home, IDNTSB SEA80FA042Accident · 2 fatalClosedCessna T207 · Salmon, IDNTSB NYC80FA068Accident · 3 fatalClosedCessna 172 · Burlington, CTNTSB FTW80FA103Accident · 1 fatalClosedPiper PA-28R · Lovington, NMNTSB NYC80FHD23Accident · No injuriesClosedCessna 150 · Little Egg Hbr, NJNTSB NYC80DA082Accident · No injuriesClosedCessna 150J · Woodstock, VTNTSB MKC80FCA27Accident · No injuriesClosedGrum-Amer AA-1B · Farmington, MONTSB LAX80FVG65Accident · No injuriesClosedCessna P206 · Lincoln, CA