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 MIA77FA009Accident · 2 fatalClosedCessna 182K · Atlanta, GANTSB CHI78DEC03Accident · No injuriesClosedGrum Amer AA-5A · Ann Arbor, MINTSB LAX78DUJ07Accident · No injuriesClosedCessna 150 · Mesa, AZNTSB IAD78FA008Accident · 1 fatalClosedPiper PA-23 · Morganton, NCNTSB IAD78FA007Accident · Serious injuriesClosedCessna 402A · Madisonville, KYNTSB DEN78FTM07Accident · No injuriesClosedBeech B33 · Salt Lake City, UTNTSB SEA78FA005Accident · 2 fatalClosedPiper PA-32 · Troutdale, ORNTSB NYC78FA001Accident · 4 fatalClosedMooney M20J · Morristown, VTNTSB MKC78FCD09Accident · Minor injuriesClosedPiper PA-31T · Des Moines, IANTSB DEN78FTM04Accident · Minor injuriesClosedCessna 150E · Ogden, UTNTSB OAK78DVG06Accident · No injuriesClosedPiper PA-28 · Travis Afb, CANTSB SEA77FA004Accident · 4 fatalClosedN.American Navion · Yakima, WANTSB CHI78FET01Accident · Minor injuriesClosedAmerican AA-1 · South Bend, INNTSB NYC78DFJ01Accident · No injuriesClosedAeronca 7AC · Mayville, NYNTSB MKC78FCD08Accident · Serious injuriesClosedCessna 172M · Lamoni, IANTSB CHI78FEP05Accident · No injuriesClosedPiper PA-24 · Green Bay, WINTSB CHI78FA003Accident · 1 fatalClosedBeech 200 · Valparaiso, INNTSB MKC78DCJ02Accident · No injuriesClosedCessna 150 · Hastings, NENTSB CHI78FEP04Accident · Minor injuriesClosedCessna 172M · Elkhorn, WINTSB NYC78DNC03Accident · No injuriesClosedPiper PA-28 · Chickville, NHNTSB IAD78FLQ02Accident · Minor injuriesClosedCessna 150 · Owensboro, KYNTSB IAD78FA004Accident · Serious injuriesClosedMooney M20E · Chesapeake, VANTSB FTW78FRG06Accident · No injuriesClosedGlobe GC-1B · Kerrville, TXNTSB MKC78DCD07Accident · Minor injuriesClosedCessna 150 · Des Moines, IANTSB FTW78FRA04Accident · No injuriesClosedNavion 260B · Houston, TXNTSB FTW78DRA03Accident · Minor injuriesClosedCessna 172G · Grapeland, TXNTSB OAK78FVM01Accident · Serious injuriesClosedAmsel-Robbi · Watsonville, CANTSB IAD78FLT01Accident · Minor injuriesClosedCessna 172 · Covington, TNNTSB ANC78DAG01Accident · Minor injuriesClosedCessna 150 · Gulkana, AKNTSB IAD78FIG01Accident · Minor injuriesClosedPiper PA28 · Baltimore, MDNTSB OAK78FVD01Accident · Minor injuriesClosedGrumman AA1B · Tracy, CANTSB MIA78DKG02Accident · No injuriesClosedCessna 140 · Tifton, GANTSB FTW78DRG04Accident · Minor injuriesClosedBeech F-35 · Brady, TXNTSB CHI78FEV03Accident · No injuriesClosedCessna 182A · Greenville, ILNTSB MKC78FCG02Accident · No injuriesClosedPiper PA-28 · Sweet Springs, MONTSB LAX78FUJ01Accident · No injuriesClosedCessna 150M · Mesa, AZNTSB CHI78FEE02Accident · No injuriesClosedCessna 150 · Kankakee, ILNTSB MKC78FCG01Accident · Serious injuriesClosedPiper PA-22 · Plattsburg, MONTSB LAX78FUG01Accident · Serious injuriesClosedPiper PA-28 · Colton, CANTSB NYC77DFA42Accident · No injuriesClosedCessna 177RG · Kingston, NYNTSB MIA77FA093Accident · 1 fatalClosedBeech 100 · Auburn, ALNTSB IAD77FIG36Accident · No injuriesClosedBeech 200 · Gaithersburg, MDNTSB FTW77FRA36Accident · No injuriesClosedCessna 172F · Pearland, TXNTSB FTW77FPJ37Accident · Minor injuriesClosedCessna 150 · Enid, OKNTSB FTW77FA077Accident · 1 fatalClosedChampion 7ECA · Nacogdoches, TXNTSB CHI77BEX52Accident · No injuriesClosedCessna 140 · Anderson, INNTSB MKC77DCQ60Accident · No injuriesClosedChampion 7ECA · Byers, KSNTSB NYC77DNC56Accident · No injuriesClosedCessna 172 · Brunswick, MENTSB LAX77DUK07Accident · No injuriesClosedPiper PA-24 · Globe, AZNTSB FTW77FPG87Accident · No injuriesClosedBeech D18S · Pine Bluff, AR