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 MIA79FA014Accident · 2 fatalClosedPiper PA-23 · Ormond Beach, FLNTSB MIA79FKT14Accident · Minor injuriesClosedPiper PA-34 · Opa Locka, FLNTSB FTW79FA014Accident · 3 fatalClosedPiper PA-24 · Amarilld, TXNTSB DEN79DQA07Accident · No injuriesClosedPiper PA28 · Raton, NMNTSB CHI79FEI06Accident · Serious injuriesClosedGrumman AA-5A · Middlefield, OHNTSB FTW79FA013Accident · 1 fatalClosedCessna 172H · Kent, TXNTSB SEA79FA013Accident · Minor injuriesClosedPiper PA-28 · Bellingham, WANTSB MKC79FA004Accident · 2 fatalClosedBeech G18S · Hays, KSNTSB MIA79DLD17Accident · No injuriesClosedPiper PA-28 · Sarasota, FLNTSB NYC79FHA03Accident · No injuriesClosedPiper PA-28 · Prospectville, PANTSB IAD79FIG02Accident · Serious injuriesClosedCessna 150 · Elkton, MDNTSB FTW79FA012Accident · 2 fatalClosedCessna 310J · Lubbock, TXNTSB MKC79FA003Accident · 1 fatalClosedCessna 310Q · Eden Prairie, MNNTSB MIA79FLD15Accident · 1 fatalClosedHoffman X2 · Tarpon Springs, FLNTSB CHI79FEK01Accident · 1 fatalClosedGrum Amer AA-5 · Reno, OHNTSB FTW79FPM03Accident · Serious injuriesClosedCessna 185A · Tulsa, OKNTSB OAK79DVD03Accident · No injuriesClosedPiper PA-28R · Arcata, CANTSB NYC79FHJ04Accident · No injuriesClosedPipep PA-28 · Riverhead, NYNTSB IAD78IA009Incident · No injuriesClosedNord 262A · Clarksburg, WVNTSB CHI79FEP06Accident · Serious injuriesClosedGrumman AA1-A · Milwaukee, WINTSB MKC79FCQ03Accident · Serious injuriesClosedPiper PA-28 · Lyons, KSNTSB FTW79FPG06Accident · Serious injuriesClosedTaylorcraft F19 · Sulphur City, ARNTSB FTW79FA010Accident · No injuriesClosedLear Jet 25B · Lafayette, LANTSB ANC79FA016Accident · 1 fatalClosedPiper PA-18 · Copper Center, AKNTSB MIA79FA010Accident · 1 fatalClosedPiper PA-31 · Missing AircraftNTSB CHI79FEX05Accident · Minor injuriesClosedCessna 172 · Martinsville, INNTSB MKC79FTG01Accident · No injuriesClosedCessna 152 · Grand Forks, NDNTSB CHI79FEG02Accident · No injuriesClosedBeech 58 · Cincinnati, OHNTSB MIA79FA005Accident · 3 fatalClosedBeech 95 · Madison, ALNTSB ANC79DA012Accident · No injuriesClosedPiper PA-32 · Lime Village, AKNTSB OAK79FA006Accident · 2 fatalClosedCessna T210G · Groveland, CANTSB MKC79FCD03Accident · Minor injuriesClosedBellanca 7KCAB · Castalia, IANTSB IAD79FKM04Accident · Minor injuriesClosedPiper PA-28 · Salisbury, NCNTSB FTW79DRG07Accident · No injuriesClosedSchweizer SGS232 · Georgetown, TXNTSB FTW79DRA02Accident · Minor injuriesClosedPiper PA-28 · Houston, TXNTSB CHI79FEC03Accident · Serious injuriesClosedPiccard AX6 · Rochester, MINTSB CHI79FA012Accident · 1 fatalClosedCessna 172M · Gallipolis, OHNTSB CHI79DEE23Accident · No injuriesClosedRaven S60A · Fox River Grve, ILNTSB CHI79DEE07Accident · No injuriesClosedBalloon WKS FF7 · Grayslake, ILNTSB SEA79FYE02Accident · Minor injuriesClosedCessna 150 · Port Townsend, WANTSB LAX79FUJ06Accident · Minor injuriesClosedMaule M-4 · Phoenix, AZNTSB SEA79FYA04Accident · Serious injuriesClosedCessna 182A · Jamieson, ORNTSB MIA79FLD08Accident · Minor injuriesClosedCessna 140 · Groveland, FLNTSB LAX79DUJ07Accident · No injuriesClosedPiper PA-32 · Sun City, AZNTSB FTW79DRA01Accident · No injuriesClosedLet-Np-K L-13 · Cypress, TXNTSB SEA79FYM02Accident · No injuriesClosedGrum Amer AA5-A · Hillsboro, ORNTSB MKC79FCA02Accident · No injuriesClosedBell 47J-2 · St Louis, MONTSB MIA79DKJ07Accident · Serious injuriesClosedCessna 152 · Alabaster, ALNTSB CHI79FEE08Accident · No injuriesClosedCessna 182 · Hinckley, ILNTSB MIA79DKT17Accident · Serious injuriesClosedCessna P210N · Marco Island, FL