NTSB investigations
1,978 cases where the phase of flight was Unknown.
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 = 990)
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 = 990)
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 ANC72AA005Accident · 2 fatalClosedCessna 150G · Petersburg, AKNTSB NYC72AN005Accident · 2 fatalClosedMooney M20F · Plum Borough, PANTSB FTW72AF013Accident · 2 fatalClosedPiper PA-24 · Missing AircraftNTSB MKC72FCA01Accident · No injuriesClosedCessna 172K · Bonne Terre, MONTSB NYC71AN126Accident · 4 fatalClosedCessna 172 · Missing AircraftNTSB MIA71AM097Accident · 2 fatalClosedCessna 337A · Jackson, MSNTSB FTW71FRJ34Accident · Serious injuriesClosedAeronca 7AC · Waterproof, LANTSB FTW71DRH35Accident · Serious injuriesClosedMaule M4210C · Botapelis, MexicoNTSB ANC71AA055Accident · 1 fatalClosedCessna 180 · Missing AircraftNTSB MIA71AM084Accident · 1 fatalClosedCessna 177B · Missing AircraftNTSB FTW71DPA25Accident · 1 fatalClosedPiper PA-24 · Baborigane, MexicoNTSB NYC71AN085Accident · 5 fatalClosedAero Comdr 1121A · South Burlington, VTNTSB OAK71FJA11Accident · No injuriesClosedGrumman SCAN30 · Ebeye, MontserratNTSB CHI71AC050Accident · 2 fatalClosedCessna 172 · Missing AircraftNTSB FTW71AF035Accident · 1 fatalClosedCessna 150F · Pearland, TXNTSB LAX71IL039Incident · No injuriesClosedBoeing 747 · Los Angeles, CANTSB NYC71AN067Accident · 6 fatalClosedCessna 172 · Missing AircraftNTSB FTW71DRG53Accident · 5 fatalClosedBeech B35 · Punta Penasco, MexicoNTSB MIA71AM043Accident · 3 fatalClosedPiper PA-24 · Missing AircraftNTSB IAD71AI026Accident · 1 fatalClosedPiper PA-28 · Missing Aircraft, VANTSB CHI71FBQ19Accident · Serious injuriesClosedTaylorcraft BC12-D · Belle Rive, ILNTSB FTW71DQG46Accident · 2 fatalClosedPiper PA-30 · Juarez, MexicoNTSB NYC71AN035Accident · 2 fatalClosedPiper PA-24 · Missing AircraftNTSB NYC71IN027Incident · No injuriesClosedBoeing 747 · Boston, MANTSB ANC71AA018Accident · 1 fatalClosedSikorsky S-55B · Valdez, AKNTSB MKC71FDQ09Accident · No injuriesClosedAeronca 7GCB · Sturgis, SDNTSB SEA71AS025Accident · 1 fatalClosedBeech S35 · Missing AircraftNTSB ANC71AA006Accident · 2 fatalClosedCessna 182 · Missing Aircraft, AKNTSB LAX71DUJ13Accident · 4 fatalClosedMooney M20C · Sonora, MexicoNTSB NYC71FHA07Accident · No injuriesClosedKnudson C JR · Layton, NJNTSB MIA71IM008Incident · No injuriesClosedBoeing 727 · Jacksonville, FLNTSB NYC71AN002Accident · 1 fatalClosedCessna 310P · Missing AircraftNTSB MIA71AM002Accident · 6 fatalClosedCessna 310G · Missing AircraftNTSB CHI70AC086Accident · 1 fatalClosedCessna 172 · Missing AircraftNTSB CHI70AC084Accident · 2 fatalClosedCessna 210B · Mackinac Is, MINTSB ANC70AA079Accident · 3 fatalClosedHiller Acft UH12EL · Northway, AKNTSB CHI70AC079Accident · 2 fatalClosedCessna 150H · Greenwood, INNTSB CHI70AC076Accident · 2 fatalClosedBeech 35-B33 · Missing AircraftNTSB FTW70DRG35Accident · No injuriesClosedCessna 182 · Del Rio, TXNTSB MIA70DKT11Accident · No injuriesClosedBellanca 17-30 · Summerlnd Key, FLNTSB FTW70DRA10Accident · 2 fatalClosedDouglas DC-3A · Melcor Ocampo, MexicoNTSB NYC70AN099Accident · 1 fatalClosedHelio Acft H-295 · Missing AircraftNTSB LAX70FUD06Accident · No injuriesClosedCessna 120 · Compton, CANTSB CHI70AC053Accident · 2 fatalClosedCessna 150G · Rantoul, ILNTSB DEN70FQA03Accident · No injuriesClosedCessna 402 · Las Vegas, NMNTSB MIA70AM062Accident · 2 fatalClosedPiper PA-24 · Missing AircraftNTSB NYC70AN065Accident · 1 fatalClosedCessna 172 · Missing AircraftNTSB LAX70A0035Accident · 2 fatalClosedCessna 150 · Sn Clemente, CANTSB NYC70AN068Accident · 1 fatalClosedCessna 180 · Missing AircraftNTSB CHI70A0035Accident · 1 fatalClosedPiper PA-28R · Missing Aircraft