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 ANC81FA039Accident · Minor injuriesClosedCessna 185F · Delta Junction, AKNTSB LAX81FA069Accident · 2 fatalClosedCessna 172 · Cholame, CANTSB FTW81FA062Accident · No injuriesClosedBell 206L1 · Huntsville, TXNTSB FTW81DRG29Accident · No injuriesClosedGrumman G-164A · San Saba, TXNTSB FTW81DA063Accident · No injuriesClosedDouglas DC-3 · Laredo, TXNTSB CHI81FEE26Accident · Serious injuriesClosedCessna 152 · Hoffman Est, ILNTSB CHI81FA040Accident · 1 fatalClosedPiper PA-32 · Corunna, MINTSB ATL81FA058Accident · Minor injuriesClosedBeech A23-24 · Sawyer, KYNTSB LAX81FA068Accident · 2 fatalClosedCessna 172N · Temecula, CANTSB SEA81FA026Accident · 1 fatalClosedMuir RV-3 · Renton, WANTSB NYC81FNE13Accident · No injuriesClosedCessna 150 · Mansfield, CTNTSB MIA81FA057Accident · 1 fatalClosedDouglas C-54B · St.Croix (Atlantic Ocean)NTSB MIA81IA058Incident · Minor injuriesClosedDehavilland DH-114 · St Thomas, VINTSB FTW81FA059Accident · 1 fatalClosedCessna 172P · Lake Charles, LANTSB MKC81FCQ18Accident · Minor injuriesClosedCessna 150K · Haysville, KSNTSB CHI81FA039Accident · 2 fatalClosedCessna A185F · Patzau, WINTSB FTW81IA058Incident · No injuriesClosedEmbraer 110P1 · Lafayette, LANTSB FTW81FA056Accident · Minor injuriesClosedBell 206L-1 · Gulf Of Mexico (Gulf of Mexico)NTSB MIA81FA055Accident · No injuriesClosedN.American P51D · Tallahassee, FLNTSB ANC81DA036Accident · No injuriesClosedChampion 7EC · Chignik Lagoon, AKNTSB MKC81FCG28Accident · No injuriesClosedCessna 182C · Springfield, MONTSB LAX81FA064Accident · 2 fatalClosedCessna 172N · Frazier Park, CANTSB FTW81FA051Accident · Minor injuriesClosedCessna 210B · Graham, TXNTSB SEA81FA025Accident · 1 fatalClosedSchweizer SGS126 · Arlington, WANTSB NYC81FGM14Accident · No injuriesClosedPiper PA-38 · Beaver Falls, PANTSB MIA81FA054Accident · 3 fatalClosedMooney M20F · San Juan, PRNTSB FTW81FRA22Accident · Serious injuriesClosedGrumman G-164B · Lissie, TXNTSB SEA81FYP11Accident · Minor injuriesClosedPiper PA-28 · Wenatchee, WANTSB MIA81FA053Accident · Minor injuriesClosedHiller UH-12D · Miami Beach, FLNTSB MKC81FCQ17Accident · Minor injuriesClosedBeech A36 · Hill City, KSNTSB LAX81FA118Accident · 2 fatalClosedCessna T210N · Bishop, CANTSB SEA81FYK07Accident · Serious injuriesClosedHiller Acft UH-12E · Umpqua, ORNTSB LAX81FUJ43Accident · No injuriesClosedCessna 210D · Phoenix, AZNTSB LAX81FA061Accident · 2 fatalClosedPiper PA-28 · Tucson, AZNTSB NYC81FNC10Accident · Serious injuriesClosedPiper PA-23 · Brookfield, VTNTSB LAX81FA060Accident · 2 fatalClosedCessna 150 · Reno, NVNTSB FTW81DRD14Accident · No injuriesClosedCessna 402B · Houma, LANTSB DEN81FA022Accident · No injuriesClosedBell 206A · Evanston, WYNTSB NYC81FNC09Accident · No injuriesClosedCessna 140 · Enfield, NHNTSB NYC81FHD16Accident · Minor injuriesClosedPiper PA-28 · Smithville, NJNTSB ATL81DKJ14Accident · No injuriesClosedPiper PA-38 · Auburn, ALNTSB ANC81FA033Accident · 2 fatalClosedPiper PA-18A · Fairbanks, AKNTSB LAX81FA059Accident · 4 fatalClosedPiper PA-28 · Molokai, HINTSB ANC81FA029Accident · No injuriesClosedCessna 180 · Shishmaref, AKNTSB ANC81FA028Accident · 1 fatalClosedDehavnd Can DHC-2 · Kenai, AKNTSB LAX81FUJ41Accident · No injuriesClosedCessna 182Q · Apache Jct, AZNTSB FTW81FRG26Accident · No injuriesClosedGreat Lakes 2T-1A2 · Alamo, TXNTSB NYC81FA032Accident · 2 fatalClosedBeech F33A · Ilion, NYNTSB SEA81FYP10Accident · Minor injuriesClosedPiper PA-25 · Oaksdale, WANTSB LAX81FUG16Accident · No injuriesClosedHarmon-Weig Jungst · Corona, CA