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 FTW81FA113Accident · 3 fatalClosedCessna 172D · Alamogordo, NMNTSB CHI81FER48Accident · No injuriesClosedCessna 172P · Thief River Fa, MNNTSB ANC81FA075Accident · 5 fatalClosedCessna U206 · Moose Pass, AKNTSB NYC81DA069Accident · Serious injuriesClosedBritish AC 1-11 · Pittsburgh, PANTSB MIA81FA089Accident · 2 fatalClosedCessna 172P · Hollister, FLNTSB FTW81FQA34Accident · No injuriesClosedBellanca 17-30 · Albuquerque, NMNTSB MIA81FKA07Accident · Minor injuriesClosedBeech S35 · St. Thomas, VINTSB LAX81FUG33Accident · 1 fatalClosedSchweizer 1-26D · Hemet, CANTSB CHI81FEK25Accident · Minor injuriesClosedBoeing B75N1 · Richwood, OHNTSB CHI81FA069Accident · Serious injuriesClosedRockwell 680V · Minneapolis, MNNTSB LAX81DVD30Accident · No injuriesClosedAeronca KCA · Willits, CANTSB FTW81IA112Incident · No injuriesClosedAerospatial AS350 · Port Arthur, TXNTSB FTW81DPG49Accident · No injuriesClosedRockwell S2R · Bono, ARNTSB CHI81FEG13Accident · Serious injuriesClosedWaco YKS7 · Hamilton, OHNTSB CHI81FEC30Accident · Minor injuriesClosedPiper PA-38 · Utica, MINTSB ANC81FA072Accident · Minor injuriesClosedFairchild C-119G · Bettles, AKNTSB LAX81FA101Accident · 3 fatalClosedCessna T210 · Elko, NVNTSB LAX81DUG32Accident · No injuriesClosedCessna 182 · Corona, CANTSB CHI81FEX21Accident · No injuriesClosedTaylorcraft BC-65 · Paoli, INNTSB CHI81FEI22Accident · Minor injuriesClosedCessna 172 · Swanton, OHNTSB CHI81DEX24Accident · No injuriesClosedCessna 152 · Sedalia, INNTSB NYC81FA067Accident · Minor injuriesClosedCessna 172 · Bridgeport, NJNTSB CHI81FEX19Accident · Serious injuriesClosedCessna 172N · Jasonville, INNTSB LAX81FA099Accident · 3 fatalClosedPiper PA-28 · Sherman Oaks, CANTSB DEN81FTE48Accident · Serious injuriesClosedPiper PA-38 · Grand Junction, CONTSB ANC81FA071Accident · 1 fatalClosedPiper J3C-65 · North Pole, AKNTSB ANC81FA069Accident · 5 fatalClosedCessna 207 · Mt Denali, AKNTSB SEA81FYP23Accident · Minor injuriesClosedPiper PA-28R · Sunnyside, WANTSB NYC81IA061Incident · Minor injuriesClosedShort Bros SD3-30 · Wilkes Barre, PANTSB DEN81FTE46Accident · Serious injuriesClosedEiriavion Oypik · Aspen, CONTSB SEA81FA042Accident · 3 fatalClosedPiper PA-28 · Bliss, IDNTSB FTW81FPG50Accident · No injuriesClosedHiller Acft UH-12E · Warren, ARNTSB ATL81DKQ17Accident · No injuriesClosedGrumman G-164A · West Point, MSNTSB LAX81FVA50Accident · Minor injuriesClosedGreat Lakes 2T-1A · Fresno, CANTSB LAX81FUM16Accident · Serious injuriesClosedErco 415-D · El Cajon, CANTSB FTW81FPJ29Accident · Minor injuriesClosedCessna 182 · Lawton, OKNTSB FTW81FA110Accident · 4 fatalClosedPiper PA-22 · Busch, ARNTSB LAX81FUJ71Accident · No injuriesClosedCessna 337 · Quartzsite, AZNTSB CHI81FEX18Accident · Minor injuriesClosedCessna 210J · Wirt, INNTSB ATL81FA084Accident · 4 fatalClosedCessna 172 · Martin, KYNTSB ANC81IA068Incident · No injuriesClosedCessna 207A · Skagway, AKNTSB ANC81FA067Accident · 2 fatalClosedBellanca 7GCBC · Fairbanks, AKNTSB ANC81FA066Accident · 1 fatalClosedChampion 7GCB · Wasilla, AKNTSB DEN81FA042Accident · No injuriesClosedCessna TU206G · Cisco, UTNTSB ATL81FA083Accident · 2 fatalClosedPiper PA-38 · Smiths Station, ALNTSB MKC81FCG40Accident · No injuriesClosedCessna 152 · Clever, MONTSB LAX81FA097Accident · 2 fatalClosedCessna 172M · Healdsburg, CANTSB CHI81FEV22Accident · No injuriesClosedCessna 172M · Pekin, ILNTSB FTW81FRD30Accident · Minor injuriesClosedPiper PA-38 · Lafayette, LANTSB ATL81DLA07Accident · Minor injuriesClosedCessna 152 · Folkston, GA