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 MKC79DER57Accident · Minor injuriesClosedCessna 188T · Belview, MNNTSB LAX79FUQ40Accident · Serious injuriesClosedBaby Great Lakes · Santa Paula, CANTSB DEN79FTE62Accident · No injuriesClosedGreat Lakes 2T · Castle Rock, CONTSB ANC79FAD03Accident · No injuriesClosedPiper PA-28 · Pt.Sherman, AKNTSB MKC79FCA21Accident · Serious injuriesClosedCessna 177RG · Thayer, MONTSB LAX79FUA15Accident · 1 fatalClosedCessna T210L · Newport Beach, CANTSB FTW79FA028Accident · 2 fatalClosedCessna T210N · Kingfisher, OKNTSB CHI79FEV27Accident · 1 fatalClosedSmith BGL · Macomb, ILNTSB SEA79FYM52Accident · Serious injuriesClosedCessna 150 · Sisters, ORNTSB OAK79DXQ25Accident · No injuriesClosedCessna 182 · Susanville, CANTSB NYC79FNA24Accident · No injuriesClosedCessna 305A · Quincy, MANTSB NYC79FFJ24Accident · Minor injuriesClosedPalermo ACE · Geneseo, NYNTSB NYC79FA064Accident · No injuriesClosedBell 206B · Alpine, NJNTSB MKC79DCG62Accident · No injuriesClosedBoeing A75 · Effingham, KSNTSB DEN79FTE61Accident · Serious injuriesClosedCessna 150 · Berthoud, CONTSB DEN79FA051Accident · 3 fatalClosedCessna 177RG · Fairplay, CONTSB ANC79DAG85Accident · Minor injuriesClosedPiper PA-32 · Soldotna, AKNTSB OAK79DAMS7Accident · 2 fatalClosedDouglas DC-3 · Honolulu (Pacific Ocean)NTSB MIA79DKT88Accident · No injuriesClosedCessna 152 · Opa Locka, FLNTSB LAX79FA062Accident · 1 fatalClosedCessna 172 · Mesa, AZNTSB CHI79FEX33Accident · 1 fatalClosedTexas Heli OH-13 · Solitude, INNTSB OAK79IA034Incident · Minor injuriesClosedBoeing 737 · Fresno, CANTSB NYC79DA069Incident · No injuriesClosedPiper PA-24 · Pittsburgh, PANTSB NYC79DA062Accident · No injuriesClosedPiper PA-18 · Martha'S Vnyrd (Atlantic Ocean)NTSB MIA79DKJ55Accident · Serious injuriesClosedCessna 172 · Marianna, FLNTSB IAD79DKW18Accident · Minor injuriesClosedBeech A35 · Greeneville, TNNTSB DEN79FA050Accident · No injuriesClosedAero Comdr 680FL · Northglenn, CONTSB SEA79FYM51Accident · Minor injuriesClosedBell 47G · Embler, ORNTSB LAX79DA066Accident · No injuriesClosedCessna 206 · Chinle, AZNTSB IAD79IA064Incident · No injuriesClosedNamc YS-11A · Charlottesvlle, VANTSB CHI79FEG20Accident · 1 fatalClosedWarmick BAT W3 · Miamitown, OHNTSB IAD79FLQ20Accident · No injuriesClosedCessna 172 · Louisville, KYNTSB IAD79FI610Accident · No injuriesClosedBellanca 7GCBC · Ocean City, MDNTSB CHI79FEE67Accident · No injuriesClosedFriling Variez · Plainfield, ILNTSB ANC79DAG62Accident · No injuriesClosedCessna 185F · Port Allsworth, AKNTSB FTW79DRG46Accident · No injuriesClosedSportaire · San Antonio, TXNTSB ANC79DAA23Accident · No injuriesClosedCessna 150H · Fairbanks, AKNTSB NYC79FA058Accident · 4 fatalClosedPiper PA-28 · Blng Springs, PANTSB MKC79DCG59Accident · No injuriesClosedBensen Gyro · Mountain Grove, MONTSB CHI79FEP67Accident · Minor injuriesClosedPiper PA-17 · South Byron, WINTSB SEA79FA046Accident · 1 fatalClosedPiper PA-38 · Bellevue, IDNTSB OAK79FXQ24Accident · Minor injuriesClosedCessna 172D · Reno, NVNTSB NYC79FA057Accident · 2 fatalClosedPiper PA-18S · Shenley, PANTSB FTW79FPD28Accident · No injuriesClosedCessna 150L · Weatherford, TXNTSB ANC79IA071Incident · No injuriesClosedCessna 207 · Saltery Cove, AKNTSB SEA79FYE31Accident · Minor injuriesClosedGlobe GC-1B · Puyallup, WANTSB MIA79FA103Accident · No injuriesClosedDouglas DC-3 · Belle Glade, FLNTSB ANC79IA069Incident · Minor injuriesClosedBeech C-18S · Drake Island, AKNTSB LAX79FVA49Accident · Serious injuriesClosedFocke Wolf 190 · Gustine, CANTSB LAX79DUJ98Accident · No injuriesClosedCessna 182 · Suprise, AZ