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 IAD78FHD25Accident · Minor injuriesClosedCessna 177 · Broadkil Beach, DENTSB DEN78FTF02Accident · No injuriesClosedCessna 172 · Mancos, CONTSB NYC78FNA40Accident · No injuriesClosedCessna 182 · Sciuate Beach, MANTSB SEA78DYE37Accident · Minor injuriesClosedHiller Acft UH-12E · Amanda Park, WANTSB NYC79FA009Accident · 3 fatalClosedCessna 310N · Monroe, MANTSB CHI78FA070Accident · 1 fatalClosedCessna 150F · Portage, WINTSB OAK78FVW21Accident · Minor injuriesClosedVarga 2150A · Las Vegas, NVNTSB LAX78FUK09Accident · Serious injuriesClosedEnstrom 280C · Kingman, AZNTSB OAK78DVM49Accident · No injuriesClosedBenson B8M · Watsonville, CANTSB NYC78FHJ22Accident · Minor injuriesClosedCessna 172 · Islip, NYNTSB OAK78FA057Accident · 2 fatalClosedPiper PA-28 · Concord, CANTSB MIA78FA126Accident · 2 fatalClosedCessna 337G · Atlanta, GANTSB ANC79DAG01Accident · Minor injuriesClosedPiper PA-18 · Lake Louise, AKNTSB ANC78FAA39Accident · No injuriesClosedMaule M-5 · Kotzbue, AKNTSB MIA78FA128Accident · 4 fatalClosedDouglas DC-3 · Missing AircraftNTSB MIA78FKG82Accident · No injuriesClosedCessna 188B · Brooklett, GANTSB IAD78DA113Accident · Serious injuriesClosedBoeing 707 · St Louis, MONTSB CHI78FEM42Accident · Minor injuriesClosedPiper PA-22 · Kalamazoo, MINTSB ANC79DAG14Accident · No injuriesClosedCessna 182 · Skwentna, AKNTSB MIA78FA125Accident · 1 fatalClosedPiper E-2 · Fernandina, FLNTSB CHI78FEX39Accident · No injuriesClosedPiper PA-38 · Indianapolis, INNTSB CHI78FEE68Accident · Minor injuriesClosedBeech V35B · Dekalb, ILNTSB NYC78FA095Accident · 2 fatalClosedPiper PA-31 · Granville, MANTSB IAD78FLQ34Accident · No injuriesClosedHughes 269A · Lexington, KYNTSB NYC78FFJ41Accident · No injuriesClosedPiper PA-23 · Sherman, NYNTSB MIA78DKJ91Accident · Minor injuriesClosedBellanca 7KCAB · Jasper, ALNTSB FTW78FRD57Accident · No injuriesClosedAero Comdr 200D · Patterson, LANTSB OAK78FXQ48Accident · No injuriesClosedN American P-51H · Reno, NVNTSB OAK78FXQ46Accident · No injuriesClosedBoeing E75N1 · Reno, NVNTSB OAK78DA055Accident · 2 fatalClosedN.American SNJ-4 · Reno, NVNTSB NYC78FA093Accident · 2 fatalClosedCessna R172K · Venice Center, NYNTSB DEN78DTC39Accident · No injuriesClosedCessna 180 · Jackson, WYNTSB OAK78DXQ47Accident · No injuriesClosedPiper PA-22 · Elko, NVNTSB NYC78FA094Accident · 1 fatalClosedCessna 182 · Dupont, PANTSB FTW78FPA36Accident · No injuriesClosedPiper PA-22 · Celina, TXNTSB FTW78DRG72Accident · No injuriesClosedCessna 152 · Three Rivers, TXNTSB CHI78FEP70Accident · No injuriesClosedPiper PA-28 · Milwaukee, WINTSB SEA78FA065Accident · 1 fatalClosedPiper PA-28 · Rainier, ORNTSB DEN78FQA57Accident · No injuriesClosedCessna TU206F · Mesita, NMNTSB ANC79DAG06Accident · No injuriesClosedPiper PA-18 · Talkeetna, AKNTSB SEA78DYA25Accident · No injuriesClosedStinson 108-3 · Boise, IDNTSB MIA78DLA51Accident · No injuriesClosedAero Comdr S2R · Camilla, GANTSB ANC79DAG23Accident · No injuriesClosedAeronca 15AC · Iliamna, AKNTSB SEA78DYK22Accident · No injuriesClosedPiper PA-28 · Sun River, ORNTSB MIA78DLD76Accident · Minor injuriesClosedBeech G18S · Nnassau (Atlantic Ocean)NTSB SEA78FA064Accident · 1 fatalClosedCessna 185F · Riggins, IDNTSB NYC79IA001Incident · Minor injuriesClosedBoeing SP747 · Atlantic Ocean (Atlantic Ocean)NTSB MIA78FA123Accident · 1 fatalClosedCessna 172N · Gautier, MSNTSB IAD78FLQ32Accident · Minor injuriesClosedCessna 172D · Corbin, KYNTSB FTW78FA078Accident · No injuriesClosedBolkow BO-105 · Morgan City, LA