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 SEA80DYE47Accident · 2 fatalClosedCoot B · Kelso, WANTSB NYC80FNC35Accident · No injuriesClosedChampion 7ECA · Scarborough, MENTSB MIA81DKT36Accident · No injuriesClosedPiper PA-23 · Guantanamo (Atlantic Ocean)NTSB MIA80FKT52Accident · Serious injuriesClosedPiper PA-28R · Ft Lauderdale, FLNTSB FTW80DPG52Accident · Minor injuriesClosedCessna 177 · O'Neal, ARNTSB CHI80FA060Accident · 1 fatalClosedPiper PA-28 · Lake City, MINTSB LAX80FVM36Accident · No injuriesClosedPiper PA-31 · Morgan Hill, CANTSB FTW80FA096Accident · 2 fatalClosedAero Comdr 680FLP · Iola, TXNTSB ATL80FIJ07Accident · No injuriesClosedPiper PA-28 · Ewing, VANTSB MIA80DKT49Accident · No injuriesClosedEnstrom F-28A · Jupiter, FLNTSB DEN80IA050Incident · No injuriesClosedDouglas DC-10 · Chicago, ILNTSB LAX80DJA21Accident · 1 fatalClosedCessna T188C · Hawaiian Islands, HINTSB CHI80FEE35Accident · No injuriesClosedVolmer VJ22 · Sublette, ILNTSB ATL80DKG15Accident · Minor injuriesClosedCessna 177B · Stone Mt, GANTSB SEA80FYP29Accident · No injuriesClosedCessna TU206F · Sunnyside, WANTSB LAX80FUG48Accident · No injuriesClosedCessna 172N · Palmdale, CANTSB FTW80FPD38Accident · Minor injuriesClosedCessna 150 · Poolville, TXNTSB MKC80FCA23Accident · No injuriesClosedCessna 152 · Poplar Bluff, MONTSB MKC80FCA22Accident · 1 fatalClosedBensen B8M · Montgomery Cy, MONTSB LAX80FUA15Accident · No injuriesClosedCessna 177RG · Santa Ana, CANTSB LAX80DUJ84Accident · No injuriesClosedCessna 210-5 · Prescott, AZNTSB LAX80DJY01Accident · Minor injuriesClosedBeech D18S · Yap-W.Caroline Is (Pacific Ocean)NTSB FTW80FA094Accident · 5 fatalClosedSikorsky S-58T · Morgan City, LANTSB FTW80FA093Accident · 1 fatalClosedBell 205A-1 · Arcola, TXNTSB SEA80FA037Accident · 2 fatalClosedCessna 170A · Clinton, WANTSB MKC80FA046Accident · No injuriesClosedCessna P210N · Marceline, MONTSB LAX80DXQ31Accident · No injuriesClosedCessna 206 · Elko, NVNTSB FTW80DA092Accident · Serious injuriesClosedGrum-Amer AA-1C · Plain Dealing, LANTSB ANC80DAG78Accident · No injuriesClosedCessna 180 · Iliamna, AKNTSB MIA80DA083Accident · Serious injuriesClosedDouglas DC-9 · Tampa, FLNTSB FTW80FA091Accident · 1 fatalClosedSchleicher ASW-20 · Hobbs, NMNTSB DEN80FTC23Accident · No injuriesClosedPiper PA-25 · Aladdin, WYNTSB CHI80FET20Accident · No injuriesClosedAeronca 65C · Ft.Wayne, INNTSB NYC80IA057Incident · No injuriesClosedBritish AC 1-11 · Pittsburgh, PANTSB MKC80FA044Accident · No injuriesClosedCessna P210N · Winfield, KSNTSB MIA80FA084Accident · No injuriesClosedBell 47G-2 · Miami, FLNTSB ATL80FLQ22Accident · No injuriesClosedGrumman G-164A · Garfield, KYNTSB ATL80FA074Accident · 2 fatalClosedPiper PA-28R · Reliance, TNNTSB SEA80DYM47Accident · Serious injuriesClosedCessna 152 · Milton-Freewtr, ORNTSB NYC80FA055Accident · 2 fatalClosedCessna A150M · Davis Park, NYNTSB CHI80FA055Accident · No injuriesClosedBell 47J2 · Cleveland, OHNTSB SEA80DYM49Accident · No injuriesClosedHenkes RV-3 · Canby, ORNTSB NYC80FGT16Accident · No injuriesClosedBell 47G · Gettysburg, PANTSB ATL80FA073Accident · Serious injuriesClosedHughes 269B · Washington, DCNTSB ANC80FA067Accident · 8 fatalClosedCessna 402B · Golovin, AKNTSB ANC80DA068Accident · No injuriesClosedHughes 369B · Chokosna, AKNTSB LAX80FUA14Accident · No injuriesClosedCessna T210 · Anaheim, CANTSB CHI80FA053Accident · 1 fatalClosedCessna 150 · Wadsworth, OHNTSB ANC80FA066Accident · 1 fatalClosedPiper PA-23 · False Pass, AKNTSB ANC80FA064Accident · Serious injuriesClosedCessna A185F · False Island, AK