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 ATL82DA010Accident · 1 fatalClosedPiper PA-28 · Myrtle Beach, SCNTSB MKC82DCQ02Accident · No injuriesClosedPiper PA-23 · Goodland, KSNTSB LAX81DJA01Accident · No injuriesClosedHiller Acft UH-12E · Kahului Maui, HINTSB DEN81FTA03Accident · No injuriesClosedBrantly B-2B · Broadus, MTNTSB CHI82FA006Incident · Minor injuriesClosedShorts SD3-30 · Dixon, ILNTSB LAX81IA003Incident · No injuriesClosedDouglas DC-10 · Los Angeles, CANTSB ATL82FA008Accident · 3 fatalClosedBeech 55 · Rock Hill, SCNTSB ANC82DA004Accident · Serious injuriesClosedPiper PA-32 · Port Heiden, AKNTSB ATL82FLA02Accident · No injuriesClosedMooney M20C · Folkston, GANTSB NYC82FA003Accident · Serious injuriesClosedCessna 152 · Fishers Island, NYNTSB LAX82FA002Accident · 1 fatalClosedCessna 152 · Arvin, CANTSB FTW82DRG03Accident · Serious injuriesClosedBeech C50 · Goliad, TXNTSB NYC82FHM01Accident · Minor injuriesClosedCessna 152 · Blooming Grove, NYNTSB ATL82DA007Accident · No injuriesClosedCessna 340 · Waycross, GANTSB MKC82FCQ01Accident · Minor injuriesClosedBeech M35 · Garden City, KSNTSB MIA82FLD01Accident · Serious injuriesClosedPiper PA-18A · Ft Pierce, FLNTSB FTW82DA007Accident · No injuriesClosedAerospatle AS350D · Houma, LANTSB CHI82FA002Accident · 1 fatalClosedBeech B95A · Bedford Park, ILNTSB ATL82FKM01Accident · Minor injuriesClosedCessna R182 · West Jefferson, NCNTSB SEA81FYP39Accident · No injuriesClosedPiper PA-28R · Republic, WANTSB FTW82DRA01Accident · No injuriesClosedBeech V35B · Blessing, TXNTSB ANC82FAD01Accident · No injuriesClosedAerospatle AS350D · Juneau, AKNTSB NYC82FNA02Accident · Serious injuriesClosedCessna 182 · East Pepperell, MANTSB NYC82FHJ01Accident · No injuriesClosedCessna 172 · Westhampton, NYNTSB LAX82DUJ01Accident · No injuriesClosedPiper PA-23 · Show Low, AZNTSB DEN81FTA01Accident · Serious injuriesClosedPiper PA-18 · Glasgow, MTNTSB ATL82FA005Accident · 3 fatalClosedBeech 58 · Harlan, KYNTSB FTW82FA006Accident · 1 fatalClosedCessna 172P · Orange, TXNTSB NYC82FNE01Accident · Serious injuriesClosedBeech A35 · Montague, MANTSB MKC82FCD01Accident · No injuriesClosedBeech A36TC · Garner, IANTSB CHI82FEC02Accident · 1 fatalClosedGulfstream AA-1B · Carsonville, MINTSB NYC82FA002Accident · 1 fatalClosedCessna 150H · Worth, NYNTSB FTW82FPA02Accident · No injuriesClosedBeech 65 · Rockwall, TXNTSB ATL82FKG01Accident · Serious injuriesClosedHughes 369D · Savannah, GANTSB NYC81FGM02Accident · Serious injuriesClosedCessna 150J · Dubois, PANTSB CHI82FER06Accident · Minor injuriesClosedPiper PA-28R · Lynd, MNNTSB ATL82FGM01Accident · No injuriesClosedPiper PA-38 · New Cumberland, WVNTSB NYC82FNA01Accident · Minor injuriesClosedCessna 172 · North Reading, MANTSB DEN82FA002Accident · 3 fatalClosedCessna 310 · Eureka, UTNTSB DEN82FA001Accident · 1 fatalClosedCessna 182RG · La Sal, UTNTSB MIA81FKT01Accident · Minor injuriesClosedCessna P210N · Miami, FLNTSB DEN82FTI01Accident · Serious injuriesClosedPiper PA-28 · Helena, MTNTSB ATL82FIG01Accident · 2 fatalClosedBucker Jung 1.131 · Baltimore, MDNTSB MKC82FA001Accident · 2 fatalClosedVarga 2150A · Glenwood, IANTSB LAX82FVA65Accident · Serious injuriesClosedHiller Acft FH1100 · Bakersfield, CANTSB MKC81FCA01Accident · No injuriesClosedPiper PA-38 · Chesterfield, MONTSB ATL82IA002Incident · No injuriesClosedDouglas DC-10 · Baltimore, MDNTSB ATL82FA001Accident · 2 fatalClosedPiper PA-38 · Gadsden, ALNTSB ATL81FA118Accident · Serious injuriesClosedHughes 369A · Atlanta, GANTSB ANC81DAG96Accident · No injuriesClosedMooney M20K · Kasilof, AK