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 LAX80FVD35Accident · No injuriesClosedBeech J35 · Santa Rosa, CANTSB LAX80FUA18Accident · Minor injuriesClosedBeech V35TC · Newport Beach, CANTSB SEA80FYE50Accident · Minor injuriesClosedCessna 182A · Issaquah, WANTSB NYC80FGM26Accident · No injuriesClosedCessna 152 · Connellsville, PANTSB MKC80FCD29Accident · Serious injuriesClosedBellanca 14-13 · Delphus, IANTSB ATL80FID26Accident · Minor injuriesClosedPiper PA-24 · Bottoms Bridge, VANTSB LAX80FA130Accident · 2 fatalClosedMooney M20C · Elk, CANTSB CHI80FA062Accident · 1 fatalClosedCessna 150 · Mishawaka, INNTSB MKC80FCG40Accident · No injuriesClosedCessna 170 · Lake Winnebago, MONTSB MKC80DCQ28Accident · No injuriesClosedVarieze 01 · Dodge City, KSNTSB FTW80FQG36Accident · 1 fatalClosedPiper PA-25 · Midkiff, TXNTSB CHI80FEP44Accident · Minor injuriesClosedPiper PA-28 · Collins, WINTSB MIA80FLD85Accident · Minor injuriesClosedPiper PA-28 · Melbourne, FLNTSB LAX80DVA59Accident · No injuriesClosedBeech J35 · Bakersfield, CANTSB FTW80FA099Accident · 2 fatalClosedCessna 172M · Bridgeport, TXNTSB CHI80FEX29Accident · No injuriesClosedHiller Acft UH-12E · Elrod, INNTSB SEA80FYK12Accident · Serious injuriesClosedCessna 182A · Roseburg, ORNTSB SEA80FA039Accident · 1 fatalClosedAero Comdr 500B · Salmon, IDNTSB CHI80FEE41Accident · 1 fatalClosedMurphy RV-3 · Streator, ILNTSB ATL80FKQ19Accident · No injuriesClosedCessna A188B · Merigold, MSNTSB MKC80FCJ26Accident · Minor injuriesClosedMaule M4-210 · O'Neill, NENTSB LAX80DVM38Accident · No injuriesClosedBellanca 7GCBC · Sn Luis Obspo, CANTSB MIA80DLA31Accident · Minor injuriesClosedPiper J5A · Daytona Beach, FLNTSB LAX80DUQ19Accident · Minor injuriesClosedPiper PA-28 · Mine Canyon, CANTSB DEN80FTC20Accident · No injuriesClosedHughes 269C · Edgerton, WYNTSB CHI80FEK23Accident · No injuriesClosedPiper PA-32 · Marietta, OHNTSB ATL80FLQ26Accident · No injuriesClosedCessna P210N · Lexington, KYNTSB ANC80FA081Accident · 2 fatalClosedDehavnd Can DHC-3 · Togiak, AKNTSB MIA80DKT51Accident · No injuriesClosedNavion A · W Palm Beach, FLNTSB LAX80FVD32Accident · No injuriesClosedAero Comdr 680FLP · Emeryville, CANTSB FTW80FRG60Accident · Minor injuriesClosedCessna 152 · San Antonio, TXNTSB DEN80FTG15Accident · Minor injuriesClosedCessna U206G · Grand Forks, NDNTSB ATL80FID25Accident · Serious injuriesClosedSonerai M-1 · Matoaca, VANTSB ANC80DA080Accident · No injuriesClosedHughes 369 · Kivalina, AKNTSB DEN80FTM34Accident · Serious injuriesClosedPiper PA-28 · Callao, UTNTSB CHI80FER63Accident · Minor injuriesClosedCessna 188 · Long Prairie, MNNTSB FTW80IA098Incident · No injuriesClosedBell 212 · Sabine Pass, TXNTSB ANC80FA079Accident · 4 fatalClosedCessna A185F · Kodiak, AKNTSB MIA80FLD70Accident · No injuriesClosedCessna 150M · Merritt Island, FLNTSB CHI80FEC26Accident · 1 fatalClosedBell 47D1 · Munith, MINTSB ATL80FA079Accident · No injuriesClosedLear Jet 25 · Paducah, KYNTSB ANC80FAA19Accident · Serious injuriesClosedPiper PA-16 · Nome, AKNTSB ANC80DA078Accident · No injuriesClosedCessna 172 · Galena, AKNTSB ANC80DA077Accident · Minor injuriesClosedDehavilland DHC-2 · Cordova, AKNTSB LAX80FUQ18Accident · Minor injuriesClosedMooney M20C · Mojave, CANTSB DEN80FTM33Accident · Serious injuriesClosedCourt Sport A · Richfield, UTNTSB CHI80DEV30Accident · No injuriesClosedBell 47D-1 · Rantoul, ILNTSB MKC80FCJ25Accident · No injuriesClosedCessna 150L · Sutton, NENTSB MKC80DCJ21Accident · No injuriesClosedPiper PA-25 · Minden, NENTSB LAX80DVA58Accident · No injuriesClosedCessna 421B · Fresno, CA