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 LAX81DXQ06Accident · Minor injuriesClosedPiper PA-24 · Stateline, NVNTSB CHI81FEK11Accident · No injuriesClosedCessna 414A · Paulding, OHNTSB LAX81FVW05Accident · No injuriesClosedCessna 172N · Las Vegas, NVNTSB FTW81FPD07Accident · Serious injuriesClosedCessna 152 · Thurber, TXNTSB MKC81FCG19Accident · No injuriesClosedBede BD-5B · Springfield, MONTSB FTW81FQA10Accident · No injuriesClosedPiper PA-18A · Roswell, NMNTSB FTW81DQD11Accident · No injuriesClosedBeech A35 · El Paso, TXNTSB FTW81FA017Accident · 2 fatalClosedPiper PA-32R · Hagarville, ARNTSB FTW81DA016Accident · No injuriesClosedAerospatial AS-350 · Cameron (Atlantic Ocean)NTSB SEA81FA011Accident · 2 fatalClosedPiper PA-12 · Rexburg, IDNTSB NYC81FHJ03Accident · Minor injuriesClosedCessna 150 · Massapequa Pk, NYNTSB LAX81FVG09Accident · No injuriesClosedStits SA11A · Red Bluff, CANTSB DEN81FTK05Accident · Minor injuriesClosedAmer Avco AA-1 · Castlewood, SDNTSB ATL81FA028Accident · 1 fatalClosedPiper PA-28 · Valdosta, GANTSB ANC81FA008Accident · 4 fatalClosedPiper PA-32 · Cold Bay, AKNTSB FTW81DRA10Accident · No injuriesClosedErco 415-L · Texas City, TXNTSB MKC81FA010Accident · No injuriesClosedSwearingen SA226T · Kansas City, KSNTSB ATL81FA025Accident · 1 fatalClosedCessna 152 · Ft Adams, MSNTSB NYC81FNE05Accident · Minor injuriesClosedPiper J-3 · Coventry, CTNTSB NYC81FA016Accident · 4 fatalClosedPiper PA-28R · Jamaica, NYNTSB MIA81DLD12Accident · No injuriesClosedCessna 210 · Stuart, FLNTSB DCA81IA004Incident · No injuriesClosedLear Jet 25 · Childress, TXNTSB ATL81DKM01Accident · No injuriesClosedBaby GR LKS 1 · Greensboro, NCNTSB ANC81DAA07Accident · Serious injuriesClosedCessna T210G · Ruby, AKNTSB MKC81FCA05Accident · Serious injuriesClosedPiper PA-36 · Hayti, MONTSB CHI81FA009Accident · 3 fatalClosedCessna 210H · Hagerstown, INNTSB MKC81FCJ04Accident · No injuriesClosedCessna 182 · Albion, NENTSB ATL81DID03Accident · Minor injuriesClosedTaylorcraft BC12-D · Scottsville, VANTSB NYC81IA015Incident · Minor injuriesClosedNord 262A12 · Groton, CTNTSB LAX81FUM06Accident · No injuriesClosedCessna 150 · Leucadia, CANTSB MIA81DLD15Accident · No injuriesClosedPiper PA-23 · Cassia, FLNTSB ATL81FA024Accident · 2 fatalClosedPiper PA-30 · Sunbright, TNNTSB ATL81FA022Accident · 3 fatalClosedSwearigen SA26AT · Albany, KYNTSB MIA81DLA05Accident · No injuriesClosedCessna 152 · Gainsville, FLNTSB LAX81DVG07Accident · No injuriesClosedBellanca 7ECA · Red Bluff, CANTSB LAX81FUJ12Accident · Minor injuriesClosedBell 47D-1 · Horseshoe Lk, AZNTSB FTW81FRG08Accident · Serious injuriesClosedMitsubishi MU-2J · Port Aransas, TXNTSB FTW81FPM03Accident · No injuriesClosedCessna R172K · Lenapah, OKNTSB CHI81FA008Accident · 1 fatalClosedPiper PA-24 · Annawan, ILNTSB ATL81FIJ01Accident · Serious injuriesClosedCessna 180 · Morgantown, WVNTSB ATL81FA019Accident · 5 fatalClosedPiper PA-32 · Hilton Head, SCNTSB NYC81FNA06Accident · No injuriesClosedSonerai II · East Greenwich, RINTSB FTW81FRJ06Accident · No injuriesClosedCessna 152 · Springhill, LANTSB FTW81FPG06Accident · Serious injuriesClosedCessna 152 · Jasper, ARNTSB NYC81FA012Accident · 3 fatalClosedPiper PA-20 · East Berlin, PANTSB NYC81DHD10Accident · No injuriesClosedBell 206L · Odessa, DENTSB FTW81FPM04Accident · No injuriesClosedBeech E18S · Tulsa, OKNTSB NYC81DHA05Accident · No injuriesClosedHughes 300C · Whitehouse, NJNTSB ATL81FLG06Accident · Serious injuriesClosedPiper PA-28 · Clemson, SCNTSB ATL81DKJ03Accident · No injuriesClosedCessna 402B · Fairhope, AL