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 ANC73DAG28Accident · No injuriesClosedPiper PA-18A · Skwentna, AKNTSB ANC73DAA11Accident · No injuriesClosedMaule M-4 · Tok, AKNTSB NYC73AN041Accident · 2 fatalClosedBeech V35A · Pollocksville, NCNTSB OAK73AP006Accident · 1 fatalClosedPiper PA-28 · Petaluma, CANTSB NYC73FNC19Accident · No injuriesClosedCessna 182 · Sanford, MENTSB ANC73DAG20Accident · No injuriesClosedPiper PA-18 · Talkeetna, AKNTSB MIA73AM024Accident · 2 fatalClosedPiper PA-28 · Alma, GANTSB MKC73DCA04Accident · No injuriesClosedCessna 150H · Creve Coeur, MONTSB NYC73DLJ08Accident · Minor injuriesClosedPiper PA-28R · Hatteras, NCNTSB CHI73FEE19Accident · No injuriesClosedCessna 150H · Deerfield, ILNTSB CHI73AC026Accident · 2 fatalClosedCessna 414 · Sturgis, MINTSB LAX73FUG13Accident · Serious injuriesClosedCessna A150K · Daggett, CANTSB NYC73DNA21Accident · No injuriesClosedAmer Avco AA-1 · Hopedale, MANTSB LAX73FVA15Accident · No injuriesClosedBeech V35 · Bakersfield, CANTSB LAX73AL007Accident · 3 fatalClosedPiper PA-28 · Ontario, CANTSB CHI73FEA07Accident · Minor injuriesClosedAmer Avco AA1 · W.Lafayette, INNTSB NYC73FNA14Accident · No injuriesClosedBlanik L-13 · Plymouth, MANTSB MIA73FLD10Accident · Minor injuriesClosedCessna 182M · Dunnellon, FLNTSB FTW73FPG14Accident · Minor injuriesClosedCessna 182F · Scranton, ARNTSB SEA73FTI08Accident · Minor injuriesClosedTaylorcraft BC12-D · Whitefish, MTNTSB NYC73FNC29Accident · Serious injuriesClosedSchleicher KA-6 · Farmingdale, MENTSB MIA73FLG15Accident · Minor injuriesClosedStinson 108 · Pelzer, SCNTSB NYC73DNA13Accident · No injuriesClosedCessna 150J · Middleboro, MANTSB CHI73FEI05Accident · Minor injuriesClosedMitsubishi MU-2B · Cleveland, OHNTSB NYC73FNA12Accident · Serious injuriesClosedPiper PA-32 · Nantucket, MANTSB CHI73AC016Accident · 1 fatalClosedCessna 150H · Louisville, KYNTSB MKC73DCD16Accident · No injuriesClosedBowers Fly Baby · Osage, IANTSB DEN73FQA10Accident · No injuriesClosedCessna 150 · Albuquerque, NMNTSB CHI73FEE17Accident · No injuriesClosedBeech 35-B33 · Joliet, ILNTSB MKC73DCJ13Accident · Minor injuriesClosedPiper PA-18 · Paxton, NENTSB CHI73FEE12Accident · No injuriesClosedCessna 172K · Lincolnshire, ILNTSB SEA73DYC05Accident · No injuriesClosedBell 206A · John Day, ORNTSB CHI73AC014Accident · No injuriesClosedAero Comdr 680-E · Cambridge, OHNTSB MKC73AK015Accident · Serious injuriesClosedPiper PA-23 · Fort Scott, KSNTSB MIA73DLG16Accident · No injuriesClosedCessna 150 · Waterboro, SCNTSB CHI73AC011Accident · 1 fatalClosedPiper J3C-65 · Granite City, ILNTSB NYC73IN024Incident · No injuriesClosedCessna 500 · Gangmills, NYNTSB NYC73DKM04Accident · Minor injuriesClosedCessna 150L · Indian Trail, NCNTSB MIA73FKJ07Accident · No injuriesClosedBellanca 17-30 · Huntsville, ALNTSB ANC73DAG11Accident · No injuriesClosedBellanca 7GCBC · Glennallen, AKNTSB OAK73FJZ01Accident · No injuriesClosedCessna 150 · Misawa, JANTSB MKC73DCD11Accident · No injuriesClosedCessna 150 · Fort Dodge, IANTSB FTW73AF006Accident · 2 fatalClosedCessna 150H · White Castle, LANTSB CHI73AC009Accident · 3 fatalClosedBeech J35 · Elyria, OHNTSB NYC73DNE05Accident · No injuriesClosedCessna 150G · Ansonia, CTNTSB NYC73DFJ04Accident · No injuriesClosedCessna 180 · Akron, NYNTSB NYC73DFA07Accident · No injuriesClosedLuscombe 8A · Cooperstown, NYNTSB CHI73DER01Accident · No injuriesClosedCessna 150G · New Richmond, WINTSB DEN73AD004Accident · 4 fatalClosedPiper PA-23 · Ogden, UTNTSB SEA73DYA03Accident · Serious injuriesClosedCessna 172 · Ketchum, ID