NTSB investigations
20,996 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 IAD72DID01Accident · No injuriesClosedGrumman G-164A · Blacksburg, VANTSB LAX72DUJ21Accident · No injuriesClosedBeech A33 · Tonopah, AZNTSB LAX72DUQ05Accident · No injuriesClosedBeech A23A · Santa Paula, CANTSB FTW72FPM02Accident · No injuriesClosedBellanca 14-13 · Collinsville, OKNTSB MKC72DCJ04Accident · No injuriesClosedCessna 150 · Omaha, NENTSB MKC72FCD01Accident · Minor injuriesClosedPiper PA-22 · Knoxville, IANTSB CHI72FEE04Accident · Minor injuriesClosedCessna 150L · Deerfield, ILNTSB NYC72FNA01Accident · No injuriesClosedPiper PA-28 · Norwood, MANTSB MKC72DCD09Accident · No injuriesClosedBeech V35A · Sac City, IANTSB NYC72FHA02Accident · Minor injuriesClosedCessna 140 · Line Lexington, PANTSB MIA72AM001Accident · Serious injuriesClosedDassault Falcon · Boca Raton, FLNTSB LAX72FUD01Accident · No injuriesClosedCessna 170B · Hawthorne, CANTSB DEN72DQA12Accident · Minor injuriesClosedSikorsky S-55B · Pecos, NMNTSB NYC72FHA01Accident · Minor injuriesClosedHiller UH12B · Lansdale, PANTSB MKC72FER03Accident · Serious injuriesClosedCessna 150 · Shevlin, MNNTSB MIA71DKT01Accident · Minor injuriesClosedCessna 150H · Belle Glade, FLNTSB CHI72FEC02Accident · 1 fatalClosedBensen B8M · Clio, MINTSB CHI72DLQ07Accident · No injuriesClosedPiper PA-30 · Cave City, KYNTSB SEA72FYE01Accident · No injuriesClosedCessna 150 · Lacey, WANTSB SEA72DYC04Accident · No injuriesClosedPiper J-3 · Dayton, ORNTSB OAK72DVG02Accident · No injuriesClosedChampion 7GCAA · Potter Vlly, CANTSB OAK72DVD02Accident · No injuriesClosedSchweizer SGS233 · Milpitas, CANTSB NYC72FFJ02Accident · Minor injuriesClosedPiper PA-24 · Syracuse, NYNTSB LAX72DUJ05Accident · No injuriesClosedCessna 182 · Dnosaur Cty, AZNTSB IAD72FIG01Accident · No injuriesClosedBell 206A · Rosedale, MDNTSB MKC72DCJ02Accident · No injuriesClosedPiper PA-25 · Fremont, NENTSB LAX72DUJ19Accident · No injuriesClosedCessna 172 · Glendale, AZNTSB DEN72DTM01Accident · No injuriesClosedCessna 150J · Logan, UTNTSB OAK71FVG90Accident · No injuriesClosedPiper PA-23 · Elk Grove, CANTSB IAD71FKM41Accident · Serious injuriesClosedPiper PA-28 · Salisbury, NCNTSB DEN71FTE19Accident · No injuriesClosedPiper PA-28 · Englewood, CONTSB IAD71FIA23Accident · Minor injuriesClosedBeechy Pusher · Bealton, VANTSB MIA71FKG98Accident · No injuriesClosedCessna 150 · Stone Mtn, GANTSB DEN71DTM32Accident · Minor injuriesClosedNavion A · Boulder, UTNTSB CHI71FET31Accident · Serious injuriesClosedFleet 16B · Osceola, INNTSB ANC72DAG05Accident · No injuriesClosedPiper PA-18 · Mcgrath, AKNTSB NYC71FHJ28Accident · Minor injuriesClosedCessna 177 · Deer Park, NYNTSB NYC71IN125Incident · No injuriesClosedDouglas DC9-31 · Marthas Vnyd, MANTSB MIA71DLD72Accident · No injuriesClosedPiper PA-28 · Merritt Islnd, FLNTSB ANC71FAH03Accident · Serious injuriesClosedChampion 7ECA · Skwentna, AKNTSB SEA71FYE37Accident · Minor injuriesClosedCessna 175 · Kenmore, WANTSB FTW71AF085Accident · 1 fatalClosedBell 47G-4A · New Orleans, LANTSB OAK71DVM57Accident · No injuriesClosedPiper PA-28 · Hollister, CANTSB OAK71AP054Accident · 2 fatalClosedPiper PA-28 · Ruth, CANTSB NYC71FHM31Accident · Minor injuriesClosedCessna 172 · Fairfield, NJNTSB MKC72DCQ04Accident · No injuriesClosedPiper PA-28 · Oberlin, KSNTSB LAX71FUG94Accident · No injuriesClosedHughes 269A · Ontario, CANTSB FTW71DPJ47Accident · No injuriesClosedPiper PA-18 · Oklahoma Cty, OKNTSB CHI71FEM85Accident · No injuriesClosedCessna 172G · Freeland, MINTSB CHI71FEI64Accident · No injuriesClosedBeech 35 · Shelby, OH