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 DEN81FA016Accident · 2 fatalClosedPiper PA-38 · Huron, SDNTSB ATL81IA038Incident · No injuriesClosedAvions Mrcl Falcon · Chantilly, VANTSB LAX81FA036Accident · 2 fatalClosedCessna 177RG · Flagstaff, AZNTSB NYC81FA020Accident · Serious injuriesClosedAgusta A109-A · Pittsburgh, PANTSB ANC81FA015Accident · No injuriesClosedDouglas DC-6A · Gambell, AKNTSB MKC81FCG20Accident · No injuriesClosedCessna A188B · Grain Valley, MONTSB FTW81DQA14Accident · No injuriesClosedCessna 310D · Reserve, NMNTSB ATL81FKQ03Accident · Serious injuriesClosedAeronca 7BCM · Greenwood, MSNTSB ATL81FKW06Accident · No injuriesClosedCessna 177RG · Nashville, TNNTSB MKC81FCQ08Accident · No injuriesClosedCessna T210 · Goddard, KSNTSB FTW81FPJ10Accident · No injuriesClosedBeech 95-B55 · Oklahoma City, OKNTSB CHI81FA023Accident · No injuriesClosedCessna U206F · Sherburne, MNNTSB LAX81FA033Accident · 1 fatalClosedMaule M-4 · Globe, AZNTSB SEA81FYE15Accident · No injuriesClosedPiper PA-24 · Olympia, WANTSB CHI81FEK10Accident · No injuriesClosedPiper PA-23 · Van Wert, OHNTSB ATL81FA034Accident · 1 fatalClosedHughes 269C · Viper, KYNTSB LAX81DVG12Accident · No injuriesClosedCessna 172 · Angels Camp, CANTSB FTW81FPJ09Accident · No injuriesClosedPiper PA-28 · Enid, OKNTSB SEA81FA015Accident · 3 fatalClosedAero Comdr 690B · Burns, ORNTSB FTW81FPA07Accident · No injuriesClosedCessna 210L · Mckinney, TXNTSB ATL81IA033Incident · No injuriesClosedMitsubishi MU-2B · Norfolk, VANTSB FTW81FA022Accident · 2 fatalClosedCessna 182Q · Leakey, TXNTSB SEA81FYE10Accident · Serious injuriesClosedRockwell 114 · Maple Valley, WANTSB FTW81FPJ08Accident · No injuriesClosedPiper PA-38 · Hennessey, OKNTSB DEN81FA015Accident · 1 fatalClosedCessna 310C · Encampment, WYNTSB DEN81FA014Accident · 6 fatalClosedCessna T310R · Moose, WYNTSB MIA81FLD22Accident · No injuriesClosedBeech S35 · Sanford, FLNTSB MIA81DKT16Accident · Minor injuriesClosedPiper PA-22 · Palm Beach, FLNTSB LAX81FA030Accident · 5 fatalClosedPiper PA-32R · Las Vegas, NVNTSB CHI81FEX08Accident · No injuriesClosedBeech F33A · St.Paul, MNNTSB ATL81FKJ05Accident · Minor injuriesClosedCessna 185 · Evergreen, ALNTSB CHI81DA017Accident · No injuriesClosedBeech 58TC · Elkhart Lake, WINTSB MIA81FKT19Accident · No injuriesClosedPiper PA-24 · W.Palm Beach, FLNTSB ATL81FKG06Accident · No injuriesClosedCessna 152 · Americus, GANTSB NYC81IA018Incident · No injuriesClosedAero Cmdr 690 · Dunkirk, NYNTSB LAX81DUQ10Accident · Minor injuriesClosedVarga 2150A · Simi Valley, CANTSB LAX81DA028Accident · 1 fatalClosedPiper PA-44 · Oceanside, CANTSB CHI81DAMS2Accident · 5 fatalClosedCessna 421B · Muskegon, MINTSB MIA81FA032Accident · 2 fatalClosedPiper PA-28 · Cross City, FLNTSB MIA81DKT14Accident · No injuriesClosedPiper PA-28R · Everglades Cty, FLNTSB FTW81FRJ07Accident · No injuriesClosedCessna 150 · Alba, TXNTSB ANC81FA012Accident · Serious injuriesClosedCessna 180 · Wasilla, AKNTSB LAX81FVD08Accident · No injuriesClosedEnstrom F-28-C · Eureka, CANTSB SEA81FYM12Accident · Serious injuriesClosedCessna 172N · Yacolt, WANTSB DEN81FA013Accident · 1 fatalClosedPiper PA-24 · Teton Village, WYNTSB ATL81DID07Accident · Serious injuriesClosedCessna 150L · Ruckersville, VANTSB MIA81FA027Accident · 2 fatalClosedErco 415-C · Lakeland, FLNTSB LAX81FA025Accident · 1 fatalClosedCessna 172M · Sierraville, CANTSB FTW81DQD12Accident · No injuriesClosedBellanca 17-30A · El Paso, TXNTSB MIA81DKT13Accident · No injuriesClosedCessna 206 · Miami, FL