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 FTW81FQD06Accident · No injuriesClosedPiper PA-32 · Carlsbad, NMNTSB FTW81FQA08Accident · No injuriesClosedMitsubishi MW-2B · Roswell, NMNTSB FTW81FQA07Accident · No injuriesClosedPiper PA-28R · Taos Pueblo, NMNTSB ATL81FLG04Accident · Serious injuriesClosedCessna 402B · Salley, SCNTSB ANC81DAG10Accident · No injuriesClosedHughes 269A · Goose Bay, AKNTSB LAX80FUG03Accident · No injuriesClosedCessna 150 · Big Bear Lake, CANTSB LAX80DVG05Accident · No injuriesClosedErco 415-C · Cottonwood, CANTSB CHI81FEI05Accident · No injuriesClosedCessna 152 · Port Clinton, OHNTSB ATL81FA011Accident · 1 fatalClosedCessna T210M · Pearson, GANTSB NYC81FHD06Accident · Serious injuriesClosedCessna 150K · Coatsville, PANTSB LAX81FVD05Accident · Serious injuriesClosedCessna 152 · Napa, CANTSB ATL81IA009Incident · No injuriesClosedBeech A60 · Leaksville, MSNTSB SEA81FA003Accident · 1 fatalClosedCessna 172 · Craigmont, IDNTSB FTW81FPJ04Accident · Serious injuriesClosedAero Comdr 100 · Hobart, OKNTSB CHI81FER04Accident · Minor injuriesClosedAeronca 11AC · Clyndon, MNNTSB CHI81FCA04Accident · Serious injuriesClosedPiper PA-32 · St Jacob, ILNTSB DEN81FTC04Accident · Minor injuriesClosedCessna 150M · Casper, WYNTSB FTW81FPD04Accident · No injuriesClosedCessna 182 · Ft Worth, TXNTSB LAX81FVG01Accident · 2 fatalClosedPorterfield 35W · Citrus Heights, CANTSB FTW81FRA03Accident · Minor injuriesClosedPiper PA-23 · Houston, TXNTSB NYC81DHM01Accident · No injuriesClosedCessna 177 · Pleasant Vly, NYNTSB MIA810A005Accident · Serious injuriesClosedBoeing 707 · Kingston (Atlantic Ocean)NTSB DEN81FA007Accident · 3 fatalClosedBeech 65 · Sula, MTNTSB DEN80FAMS1Accident · 2 fatalClosedMooney M20F · Buffalo, WYNTSB LAX81FUJ04Accident · No injuriesClosedMooney M20C · Willcox, AZNTSB LAX81FJA02Accident · Serious injuriesClosedPiper J3-65D · Waialua, HINTSB LAX81FA004Accident · 1 fatalClosedCessna T210 · Sacramento, CANTSB ATL80FLG01Accident · No injuriesClosedGrumman G-164B · Kingstree, SCNTSB SEA81FA002Accident · 1 fatalClosedCessna 182Q · Ashland, ORNTSB NYC81FHA02Accident · No injuriesClosedDornier D0-28 · Scranton, PANTSB FTW81FA004Accident · 2 fatalClosedBeech V35A · Cedar Hill, TXNTSB LAX81FA002Accident · 4 fatalClosedPiper PA-28 · Crestline, CANTSB CHI81FA001Accident · 3 fatalClosedCessna 337H · Waterford, MINTSB MKC81FCA12Accident · Minor injuriesClosedCessna 182N · Salem, MONTSB MIA81DLD04Accident · No injuriesClosedBell 47J · Yeehaw Jnction, FLNTSB ATL81DLQ03Accident · Serious injuriesClosedCessna 172M · Waddy, KYNTSB FTW81DRA01Accident · No injuriesClosedNavion B · Beaumont, TXNTSB LAX81FVD03Accident · Serious injuriesClosedPiper PA-28 · Castro Valley, CANTSB FTW81FPJ01Accident · Minor injuriesClosedPiper PA-38 · Stillwater, OKNTSB FTW81DQD02Accident · Serious injuriesClosedPrue Super · Alamogordo, NMNTSB ATL81FA006Accident · 4 fatalClosedCessna 172 · Roanoke, VANTSB ATL81FA005Accident · 3 fatalClosedBeech 35 · Dargan, MDNTSB ANC81DAA04Accident · Serious injuriesClosedStinson 108-3 · Nenana, AKNTSB SEA81DYM06Accident · No injuriesClosedBell 206L-1 · Cougar, WANTSB NYC81FHD02Accident · No injuriesClosedBlimp EA-1 · Lakehurst, NJNTSB FTW81FQA03Accident · No injuriesClosedBarnes AX7 · Albuquerque, NMNTSB FTW81FQA02Accident · Minor injuriesClosedRaven S-50A · Albuquerque, NMNTSB SEA81FYP01Accident · Serious injuriesClosedPiper PA-22 · Waterville, WANTSB MIA81DLD02Accident · No injuriesClosedCessna 152 · St Petersburg, FLNTSB FTW81FQA01Accident · No injuriesClosedCessna 195B · Chama, NM