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 NYC75FNA40Accident · No injuriesClosedSmith Mini · Hyannis, MANTSB FTW75DPD41Accident · No injuriesClosedBell 47G-5 · Fort Worth, TXNTSB CHI75FEC48Accident · No injuriesClosedPiper PA-28 · Ypsilanti, MINTSB OAK7KFVD46Accident · No injuriesClosedGrumman F7F · Santa Rosa, CANTSB CHI75AC090Accident · 1 fatalClosedDehavilland OH104 · Chicago, ILNTSB MIA75DKG72Accident · No injuriesClosedCessna 150 · Rome, GANTSB IAD75II061Incident · Minor injuriesClosedPiper PA-28 · Milan, TNNTSB DEN75FTE68Accident · No injuriesClosedBeech 19 · Broomfield, CONTSB CHI75AC089Accident · 3 fatalClosedGrum Amer AA-5 · Minford, OHNTSB DEN75FTE69Accident · Minor injuriesClosedSchweizer SGS134 · Colorado Spgs, CONTSB LAX75FVA63Accident · Serious injuriesClosedPiper PA-28 · Shafter, CANTSB ANC75AA083Accident · Minor injuriesClosedCessna 182 · Selawik, AKNTSB IAD75FLQ22Accident · Serious injuriesClosedPiper PA-28 · Berea, KYNTSB FTW75FQG34Accident · Serious injuriesClosedPiper PA-28 · Abernathy, TXNTSB FTW75DPG63Accident · No injuriesClosedCessna 188 · Tuckerman, ARNTSB MKC75FCD44Accident · No injuriesClosedPiper J3C-65 · Clarinda, IANTSB NYC75FGM36Accident · Serious injuriesClosedSchweizer SGU222 · Butler, PANTSB CHI75AC085Accident · 1 fatalClosedPiper PA-23 · Cleveland, OHNTSB SEA75DYI23Accident · Minor injuriesClosedCessna 177 · Cottage Grove, ORNTSB IAD75DLJ26Accident · No injuriesClosedCessna 150 · Kitty Hawk, NCNTSB FTW75FPG51Accident · Minor injuriesClosedCessna A188 · Altheimer, ARNTSB MKC75FCQ44Accident · Serious injuriesClosedPiper PA-28 · Medicine Lodge, KSNTSB CHI75FEI47Accident · No injuriesClosedGrum Amer AA-5 · Wadsworth, OHNTSB IAD75FID18Accident · Serious injuriesClosedPiper PA-28R · Chesapeake, VANTSB OAK75FVG58Accident · Minor injuriesClosedBreezy 1973 · Lincoln, CANTSB OAK75DJY06Accident · Minor injuriesClosedCessna 150L · Manila, RPNTSB MIA75DKJ58Accident · No injuriesClosedCessna 150 · Huntsville, ALNTSB OAK75DVD45Accident · Serious injuriesClosedPiper PA-28 · Tracy, CANTSB IAD75AIG18Accident · No injuriesClosedGrum Amer AA1-B · Stevensville, MDNTSB SEA75FTA17Accident · Serious injuriesClosedPiper J-3 · Cohagen, MTNTSB NYC75FFA36Accident · No injuriesClosedGrum Amer AA1-B · New Paltz, NYNTSB NYC75DHA39Accident · No injuriesClosedSchweizer I-26E · Blairstown, NJNTSB CHI75FEA19Accident · Serious injuriesClosedAerostar Ranger · Paoli, INNTSB ANC75AA075Accident · No injuriesClosedBrittnorman BN-2A · Tin City, AKNTSB NYC75FHD42Accident · Minor injuriesClosedCessna 150L · Toughkenamon, PANTSB FTW75DRJ33Accident · No injuriesClosedAeronca 7ECA · Zwolle, LANTSB SEA75FYG32Accident · No injuriesClosedSchweizer SGS233 · Colville, WANTSB SEA75DYA36Accident · No injuriesClosedCessna 150 · Boise, IDNTSB OAK75FVG55Accident · 1 fatalClosedBoeing A75 · Williams, CANTSB OAK75FVA56Accident · Serious injuriesClosedSchweizer SGS126 · Tulare, CANTSB NYC75FFJ22Accident · No injuriesClosedPiper PA-32 · Ovid, NYNTSB MKC75AK052Accident · 1 fatalClosedBeech C90 · Grand Rapids, MNNTSB NYC75AN099Accident · Serious injuriesClosedRand KR-1 · Leominster, MANTSB MKC75FER64Accident · No injuriesClosedCessna 150L · Duluth, MNNTSB CHI75FEK25Accident · No injuriesClosedCessna 210L · Urbana, OHNTSB FTW75FQG51Accident · No injuriesClosedCessna 150 · Lubbock, TXNTSB IAD75AI057Accident · 2 fatalClosedSwearingen 226AT · Southern Pines, NCNTSB CHI75FEI43Accident · Minor injuriesClosedErco 415C · Strongsville, OHNTSB MKC75FCD41Accident · No injuriesClosedPiper PA-30 · Iowa City, IANTSB DEN75DTE62Accident · No injuriesClosedBell 47G3B1 · Craig, CO