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 FTW79FQG28Accident · Serious injuriesClosedBeech B35 · Kalgary, TXNTSB OAK79FVG29Accident · Minor injuriesClosedHiller UH-12 · Weaverville, CANTSB MKC79FCG38Accident · No injuriesClosedMitsubishi MU-2B · Gardner, KSNTSB FTW79DA069Accident · Serious injuriesClosedDouglas DC-9 · Dallas, TXNTSB OAK79DVG31Accident · Serious injuriesClosedGrumman G-164A · Gridley, CANTSB NYC79FFJ12Accident · No injuriesClosedCessna 180 · Seneca Falls, NYNTSB NYC79FFA16Accident · Minor injuriesClosedNavion NAV-B · Walkill, NYNTSB MIA79FA068Accident · 1 fatalClosedBeech V35B · Grove Hill, ALNTSB LAX79FA039Accident · 2 fatalClosedPiper PA-28R · Jerome, AZNTSB OAK79FVD19Accident · Minor injuriesClosedCessna 152 · Sunol, CANTSB LAX79DUJ60Accident · No injuriesClosedCessna 150 · Fredonia, AZNTSB CHI79FEP40Accident · No injuriesClosedCessna 150M · Appleton, WINTSB LAX79DUG28Accident · No injuriesClosedBaby GRT LK 1 · Big Bear City, CANTSB DEN79FQA23Accident · Serious injuriesClosedPiper PA-28 · Gallup, NMNTSB OAK79FVD20Accident · Minor injuriesClosedPiper PA-28R · Oakland, CANTSB LAX79DUQ27Accident · Minor injuriesClosedCessna 195 · Ojai, CANTSB FTW79IA067Incident · Minor injuriesClosedBeechcraft B99A · Lafayette, LANTSB NYC79FA036Accident · 4 fatalClosedBell 206B · Sipesville, PANTSB FTW79FPG25Accident · Serious injuriesClosedMooney M20C · Hasty, ARNTSB MIA79FA065Accident · 3 fatalClosedPiper PA-28 · Naples, FLNTSB LAX79FUM11Accident · No injuriesClosedGrumman F6F · San Marcos, CANTSB SEA79FYM25Accident · Serious injuriesClosedCessna 172N · Pendleton, ORNTSB MIA79FLG20Accident · No injuriesClosedCessna 210M · Beech Island, SCNTSB MIA79FA064Accident · 1 fatalClosedPiper PA-34 · Davie, FLNTSB ANC79DAG47Accident · No injuriesClosedBrittnorman BN-2A · St Mary'S, AKNTSB NYC79FA032Accident · 4 fatalClosedGrum Amer AA-5 · Pompey, NYNTSB CHI79FEP39Accident · No injuriesClosedBellanca 7GCBC · Bristol, WINTSB SEA79FTI11Accident · No injuriesClosedHiller Acft UH-12E · St Joe Nat Fst, IDNTSB DEN79FA035Accident · 2 fatalClosedCessna 170A · Larkspur, CONTSB DEN79FTM13Accident · No injuriesClosedGrumman G44A · Delta, UTNTSB DEN79FA034Accident · No injuriesClosedCessna TU206 · Castle Rock, CONTSB CHI79FA038Accident · 1 fatalClosedBeech 65-80 · Wheeling, ILNTSB ANC79DAG43Accident · Minor injuriesClosedCessna 207 · Shageluk, AKNTSB OAK79FJA08Accident · No injuriesClosedEnstrom F-28C · Honolulu, HINTSB OAK79DA022Accident · Serious injuriesClosedCessna 207 · Boulder, NVNTSB MIA79FLG19Accident · 1 fatalClosedScorpion TOO · Johns Island, SCNTSB FTW79FQG21Accident · Serious injuriesClosedCessna 172F · Crosbyton, TXNTSB FTW79FPD11Accident · Minor injuriesClosedTaylorcraft BC12-D · Forestburg, TXNTSB DEN79FA033Accident · 4 fatalClosedPiper PA-34 · Lander, WYNTSB MIA79FKJ28Accident · Minor injuriesClosedCessna 150M · Southport, FLNTSB LAX79FUG23Accident · Serious injuriesClosedCessna T210M · Bermuda Dunes, CANTSB FTW79DQG23Accident · No injuriesClosedCessna 150 · Sonora, TXNTSB ANC79FA041Accident · 3 fatalClosedBellanca 7GCBC · Ruby, AKNTSB FTW79DRA13Accident · No injuriesClosedMooney M20A · Tomball, TXNTSB DEN79FQD04Accident · No injuriesClosedPiper PA-38 · Hatch, NMNTSB MKC79FA023Accident · Serious injuriesClosedCessna 172 · Liberal, KSNTSB ANC797A014Accident · 2 fatalClosedCessna U206 · Nightmute, AKNTSB NYC79FHD13Accident · No injuriesClosedCessna 337G · Lumberton, NJNTSB MIA79FLA19Accident · Serious injuriesClosedPiper PA-28 · Ormond Beach, FLNTSB FTW79FA065Accident · 1 fatalClosedBeech 95-B55 · Jarrell, TX