NTSB investigations
20,992 cases where the phase of flight was Approach.
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 = 500)
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 = 500)
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 LAX80FVG42Accident · Serious injuriesClosedJodel D-9 · Redding, CANTSB LAX80DVW17Accident · Serious injuriesClosedCutter 2 · Las Vegas, NVNTSB FTW80FPA12Accident · No injuriesClosedCessna 182 · Seagoville, TXNTSB SEA80DYM36Accident · No injuriesClosedCessna 150M · Yamhill, ORNTSB CHI80DEP30Accident · Minor injuriesClosedCessna 172M · Ixonia, WINTSB LAX80FVM31Accident · No injuriesClosedBellanca 17-30A · Palo Alto, CANTSB FTW80DRD33Accident · No injuriesClosedGrumman G-164A · Kinder, LANTSB CHI80FEI25Accident · No injuriesClosedPiper PA-28 · Mansfield, OHNTSB ANC80DAG55Accident · Serious injuriesClosedPiper PA-18 · Dillingham, AKNTSB ATL80IA046Incident · No injuriesClosedAerospatle SA341G · Greasy Creek, KYNTSB MIA80FLA24Accident · Serious injuriesClosedCessna 401 · Gainsville, FLNTSB NYC80FNC23Accident · No injuriesClosedMooney M20C · Keene, NHNTSB CHI80DA037Accident · 1 fatalClosedCessna 172 · Nappanee, INNTSB ATL80FIA07Accident · Minor injuriesClosedSchweizer SGS233 · Warrenton, VANTSB SEA80FA028Accident · 1 fatalClosedPiper PA-28 · Imperial, CANTSB MIA80FLD66Accident · Minor injuriesClosedPiper PA-32 · Tampa, FLNTSB FTW80FA070Accident · 1 fatalClosedCessna 150 · Tulsa, OKNTSB LAX80DXQ26Accident · No injuriesClosedCessna 320 · Quincy, CANTSB FTW80FRJ16Accident · Minor injuriesClosedCessna 182F · Uncertain, TXNTSB ATL80FLA01Accident · No injuriesClosedCessna 140 · St Marys, GANTSB LAX80FA095Accident · 2 fatalClosedBeech 35-33 · Winslow, AZNTSB LAX80DVA39Accident · No injuriesClosedPiper PA-38 · Columbia, CANTSB ATL80DLG10Accident · No injuriesClosedPiper PA-28R · Sumter, SCNTSB NYC80FNE14Accident · Serious injuriesClosedSchemp STD-CR · North Adams, MANTSB MIA80FA060Accident · 1 fatalClosedCessna 337 · Atlanta, GANTSB MIA80DA061Accident · 1 fatalClosedPiper PA-28R · St.Thomas, VINTSB ATL80FLG09Accident · No injuriesClosedCessna 180D · Summerton, SCNTSB ATL80FKJ03Accident · Minor injuriesClosedCessna 182 · Heflin, ALNTSB NYC80FA039Accident · Serious injuriesClosedPiper PA-38 · Pawtucket, RINTSB NYC80FHA11Accident · No injuriesClosedBeech M35 · Somerville, NJNTSB LAX80FVM26Accident · No injuriesClosedTom Cat I · Watsonville, CANTSB LAX80FVG33Accident · Serious injuriesClosedSchweizer SGS134 · Calistoga, CANTSB SEA80DYM31Accident · Minor injuriesClosedNaval Fcty N3N-3 · Pendleton, ORNTSB SEA80FA027Accident · 3 fatalClosedCessna 177RG · Garberville, CANTSB FTW80FA068Accident · 1 fatalClosedCessna 404 · New Orleans, LANTSB ANC80DAG44Accident · Minor injuriesClosedCessna T310R · Anchorage, AKNTSB MIA80DLA23Accident · No injuriesClosedCessna 172M · New Smyrna Bch, FLNTSB MIA80FA058Accident · Serious injuriesClosedDouglas C-47B · Dania, FLNTSB LAX81FA088Accident · 1 fatalClosedMitsubishi MU-2B · Henderson, NVNTSB NYC80FA037Accident · 1 fatalClosedCessna 150 · Akron, NYNTSB NYC80FGT09Accident · No injuriesClosedPiper PA-28 · Myerstown, PANTSB MIA80FKA07Accident · No injuriesClosedPiper PA-28 · Lares, PRNTSB NYC80FGT10Accident · No injuriesClosedSchweizer SGS233 · Jersey Shore, PANTSB LAX80FA083Accident · 4 fatalClosedPiper PA-23 · Solvang, CANTSB MIA80FKT04Accident · No injuriesClosedCessna 150L · Miami, FLNTSB CHI80FET14Accident · Minor injuriesClosedPiper PA-23 · Kendallville, INNTSB LAX80DVA31Accident · No injuriesClosedStinson 108-1 · Farmersville, CANTSB MIA80FKJ29Accident · Minor injuriesClosedPiper PA-28R · Foley, ALNTSB CHI80FEM22Accident · No injuriesClosedPiper PA-38 · Saginaw, MINTSB IAD80FLJ09Accident · Minor injuriesClosedCessna 150 · Richlands, NC