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 MIA81DKT89Accident · No injuriesClosedPiper PA-31 · Homestead, FLNTSB LAX81FUQ27Accident · 1 fatalClosedShhreder HP-11A · Pearlblossom, CANTSB CHI81DAMS5Accident · 4 fatalClosedCessna 180 · Missing AircraftNTSB MIA81FA099Accident · 1 fatalClosedPiper PA-23 · St.Thomas, VINTSB ANC81DA073Accident · 4 fatalClosedCessna A185F · Missing AircraftNTSB LAX81DVW13Accident · No injuriesClosedCessna R182 · Trona, CANTSB FTW81FA111Accident · 1 fatalClosedPiper PA-23 · Palacios, TXNTSB MIA81FA047Accident · 1 fatalClosedPiper PA-24 · Vero Beach, FLNTSB ATL81FKJ15Accident · 1 fatalClosedPiper PA-32 · Mobile, GANTSB SEA81FAMS2Accident · 1 fatalClosedBeech A36-TC · Missing AircraftNTSB LAX81DAMS2Accident · 2 fatalClosedPiper PA-24 · Missing AircraftNTSB ANC81FA017Accident · 2 fatalClosedGrumman G-21A · Dutch Harbor, AKNTSB MIA81DA035Accident · 4 fatalClosedBeech C35 · Missing AircraftNTSB DEN81FTM11Accident · No injuriesClosedPiper PA-28R · Ogden, UTNTSB LAX81FAMS1Accident · 1 fatalClosedCessna 152 · Missing AircraftNTSB ATL81FKG05Accident · No injuriesClosedBeech 200 · Alma, GANTSB ANC81FA007Accident · 1 fatalClosedCessna U206 · Missing AircraftNTSB FTW81FPM01Accident · 1 fatalClosedBenson B8M · Tulsa, OKNTSB ATL81IA004Incident · No injuriesClosedFairchild F-27 · Raliegh, NCNTSB MIA81FLD01Accident · No injuriesClosedCessna 320 · Fellsmere, FLNTSB MIA80FLD96Accident · No injuriesClosedBeech 65-B80 · Lake Marion, FLNTSB SEA80FAMS4Accident · 1 fatalClosedPiper PA-24 · Missing AircraftNTSB MIA80DA094Accident · 1 fatalClosedBeech 65-80 · Pt.Maria (Gulf of Mexico)NTSB MIA80DA093Accident · 1 fatalClosedPiper PA-23 · Little Rag Is (Atlantic Ocean)NTSB LAX80FA115Accident · 2 fatalClosedCessna 172M · Tombstone, AZNTSB MIA80DA079Accident · 2 fatalClosedErco 415-D · Missing AircraftNTSB SEA80FAMS3Accident · 3 fatalClosedCessna 182G · Missing AircraftNTSB CHI80FEK15Accident · 1 fatalClosedSchleicher ASW-20 · Mt.Sterling, OHNTSB ANC80FA054Accident · 1 fatalClosedCessna 150 · Dillingham, AKNTSB MIA80FA066Accident · No injuriesClosedPiper PA-31P · Ocala, FLNTSB LAX80FAMS2Accident · 2 fatalClosedBeech T-34B · Missing AircraftNTSB LAX80FXQ28Accident · 2 fatalClosedCessna 172A · Tahoe City, CANTSB LAX80FUM20Accident · No injuriesClosedCessna 177RG · El Cajon, CANTSB FTW80FAMS3Accident · 4 fatalClosedGrum-Amer GA-7 · Corpus Christi, TXNTSB MIA80FKT45Accident · Serious injuriesClosedCessna 404 · Miami, FLNTSB NYC80FAMS4Accident · 1 fatalClosedCessna 150 · Missing AircraftNTSB IAD80FA071Accident · 2 fatalClosedHughes 500 · Stephensville, MDNTSB FTW81DA133Accident · 3 fatalClosedMooney M20E · Bayside, TXNTSB FTW80FAMS4Accident · 3 fatalClosedMooney 720E · Missing AircraftNTSB FTW80FAMS2Accident · 5 fatalClosedBeech A36 · Missing AircraftNTSB FTW80FA106Accident · 5 fatalClosedBeech A36 · Taos, NMNTSB MIA80DA043Accident · 1 fatalClosedBeech 58 · Missing AircraftNTSB LAX80DUG18Accident · No injuriesClosedCessna 177 · Upland, CANTSB MIA80DA023Accident · 4 fatalClosedPiper PA-23 · Missing AircraftNTSB MIA80DLD21Accident · No injuriesClosedBeech 95-B55 · Ft Pierce, FLNTSB ANC80FA020Accident · 2 fatalClosedPiper PA-18 · Grayling, AKNTSB MIA80DA020Accident · 1 fatalClosedBeech D50B · Missing AircraftNTSB LAX80FA012Accident · 2 fatalClosedPiper PA-28 · Phoenix, AZNTSB MIA80DA009Accident · 1 fatalClosedPiper PA-23 · Missing AircraftNTSB MIA80FA007Accident · No injuriesClosedCessna 411 · Missing Aircraft