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 FTW80FA090Accident · Serious injuriesClosedBell 47G3B1 · Mescalero, NMNTSB CHI80FA052Accident · 1 fatalClosedCessna P210 · Marcellus, MINTSB ATL80FA072Accident · 1 fatalClosedPiper PA-31P · Charleston, SCNTSB ANC80DAG79Accident · Minor injuriesClosedCessna 185 · Dillingham, AKNTSB MIA80DLA30Accident · Minor injuriesClosedCessna 180C · Deland, FLNTSB LAX80FA119Accident · 4 fatalClosedCessna T210N · Pacoima, CANTSB ANC80DAG73Accident · No injuriesClosedPiper PA-22 · Mcgrath, AKNTSB MKC80IA052Incident · No injuriesClosedBeech 99 · Boston, MANTSB MIA80FKT47Accident · Serious injuriesClosedCessna 152 · Pahokee, FLNTSB ATL80FIJ05Accident · Serious injuriesClosedHiller Acft UH-12E · St Albans, WVNTSB ATL80DLQ21Accident · No injuriesClosedCessna 172 · Morgantown, KYNTSB SEA80FYM44Accident · No injuriesClosedPiper J3C-85 · Hood River, ORNTSB MIA80FA082Accident · Serious injuriesClosedCessna 411 · Pompano Beach, FLNTSB LAX80DUJ79Accident · No injuriesClosedPiper PA-24 · Grand Canyon, AZNTSB DEN80FTE62Accident · Serious injuriesClosedBeech K35 · Pagosa Springs, CONTSB CHI80FEP38Accident · Minor injuriesClosedCessna 177RG · New Lisbon, WINTSB ANC80FA062Accident · No injuriesClosedPiper PA-32 · Egigik, AKNTSB LAX80DUJ85Accident · No injuriesClosedCessna 320 · Holbrook, AZNTSB FTW80FRG55Accident · No injuriesClosedGrumman G-164A · Weslaco, TXNTSB FTW80FQA35Accident · Minor injuriesClosedBucker Jung 1.131 · Santa Fe, NMNTSB ATL80IA069Incident · No injuriesClosedCessna 402B · Richmond, VANTSB FTW80FRG54Accident · Minor injuriesClosedBoeing B75N1 · Raymondville, TXNTSB LAX80FUA12Accident · Minor injuriesClosedPiper PA32RT · Santa Ana, CANTSB ATL80IA067Incident · Minor injuriesClosedBoeing 727 · Richmond, VANTSB NYC80FA051Accident · 3 fatalClosedPiper PA-28 · Clearfield, PANTSB LAX80FUD10Accident · Minor injuriesClosedCessna T210 · Los Angeles, CANTSB FTW80FPG41Accident · No injuriesClosedCessna 175 · Sherrill, ARNTSB FTW80DRG53Accident · Minor injuriesClosedCessna 150F · Portland, TXNTSB DEN80FTM28Accident · No injuriesClosedCessna T337D · Ouray, UTNTSB ANC81FAA16Accident · No injuriesClosedCessna 152 · Fairbanks, AKNTSB MIA80FA078Accident · 4 fatalClosedCessna 152 · Ft Lauderdale, FLNTSB ATL80FA068Accident · 3 fatalClosedPiper PA-28 · Star Tannery, VANTSB ATL80FA064Accident · Serious injuriesClosedBeech B65 · Kenessaw, GANTSB ANC80FA065Accident · No injuriesClosedHughes 369HS · Unalakleet, AKNTSB CHI80FEG17Accident · No injuriesClosedEnstrom F-28C · Lebanon, OHNTSB ANC80DA058Accident · Minor injuriesClosedPiper PA-32 · Togiak, AKNTSB SEA80DYE38Accident · Minor injuriesClosedPiper PA-22 · Silverdale, WANTSB ANC80DAG64Accident · Minor injuriesClosedCessna 172 · Kenai, AKNTSB NYC80FFJ10Accident · Minor injuriesClosedHiller Acft UH-12E · N Cohocton, NYNTSB FTW80FPM12Accident · Minor injuriesClosedCessna 172L · Leach, OKNTSB SEA80DYE37Accident · Minor injuriesClosedCessna 182 · Marblemount, WANTSB SEA80DYA17Accident · Minor injuriesClosedCessna 182 · Mccall, IDNTSB MKC80FCG31Accident · Minor injuriesClosedAero Comdr A-9B · Cameron, MONTSB ATL80FLG14Accident · No injuriesClosedBeech A35 · Saluda, SCNTSB ANC80DAG66Accident · No injuriesClosedCessna 170B · Anchorage, AKNTSB FTW80DPJ27Accident · Minor injuriesClosedCessna 152 · Gage, OKNTSB CHI80FEK17Accident · No injuriesClosedEnstrom F-28C · Columbus, OHNTSB SEA80FA036Accident · 4 fatalClosedPiper PA32RT · Granite, ORNTSB SEA80DYP25Accident · Minor injuriesClosedCessna R172K · Mullen, IDNTSB NYC80FNE19Accident · Serious injuriesClosedStinson 108-1 · Windham, CT