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 NYC76FHA54Accident · No injuriesClosedBellanca 17-30 · Allentown, PANTSB IAD76DKW39Accident · No injuriesClosedGrumman G-164 · Livingston, TNNTSB NYC76DFJ32Accident · No injuriesClosedBell 47D-1 · Warsaw, NYNTSB MKC76DES02Accident · Minor injuriesClosedCessna 172 · Dodge Center, MNNTSB CHI76DEG23Accident · No injuriesClosedPiper PA-28 · Wilmington, OHNTSB OAK76AP068Accident · 3 fatalClosedCessna 177RG · Mt.Tallac, CANTSB CHI76FEE76Accident · No injuriesClosedClark KR-1 · Lockport, ILNTSB CHI76DEE75Accident · Minor injuriesClosedCessna 172E · Ottawa, ILNTSB NYC76FHA51Accident · No injuriesClosedErco 415-CD · Jamison, PANTSB NYC76AN124Accident · 4 fatalClosedCessna 172M · N Amityville, NYNTSB LAX76FUG71Accident · No injuriesClosedPiper PA-28 · Riverside, CANTSB LAX76DVQ51Accident · No injuriesClosedCessna 150 · Lancaster, CANTSB FTW76DRG89Accident · No injuriesClosedSchweizer SGS233 · Spicewood, TXNTSB CHI76FEV64Accident · No injuriesClosedGlobe GC-1B · Burnside, ILNTSB CHI76FEM58Accident · No injuriesClosedStinson 108-3 · Cedar Springs, MINTSB CHI76DEV66Accident · No injuriesClosedCessna 150 · Eldorado, ILNTSB MIA76FLA67Accident · No injuriesClosedCessna 150 · Palatka, FLNTSB NYC76FNE34Accident · Minor injuriesClosedGrum Amer AA-1A · Voluntown, CTNTSB SEA76FTI38Accident · 1 fatalClosedPiper PA-18A · Helena, MTNTSB SEA76AS074Accident · 5 fatalClosedCessna TU206F · Spokane, WANTSB OAK76DVA83Accident · No injuriesClosedPiper PA-24 · Delhi, CANTSB OAK76FVM46Accident · No injuriesClosedTaylorcraft F-19 · Santa Cruz, CANTSB NYC76FFA50Accident · Minor injuriesClosedCessna 182 · Old Forge, NYNTSB FTW76FRD64Accident · No injuriesClosedCessna 172M · Lake Charles, LANTSB CHI76DEP46Accident · Serious injuriesClosedCessna 172 · Dodgeville, WINTSB ANC76DAH66Accident · Serious injuriesClosedPiper PA-12 · Wasilla, AKNTSB MKC76DCJ68Accident · No injuriesClosedPiper PA-28 · Omaha, NENTSB MKC76DCD65Accident · Minor injuriesClosedTaylorcraft BC12-D · Springville, IANTSB FTW76FPH06Accident · No injuriesClosedCessna 172 · Ola, ARNTSB SEA76FTA29Accident · Minor injuriesClosedCessna 185 · Ekalaka, MTNTSB SEA76DYE55Accident · No injuriesClosedBeech B35 · Olympia, WANTSB FTW76DQH04Accident · No injuriesClosedBeech H35 · Midland, TXNTSB MIA76FKG98Accident · Serious injuriesClosedCessna 172 · Shannon, GANTSB DEN76DTM46Accident · Minor injuriesClosedPiper PA-22 · Bullfrog Basin, UTNTSB DEN76DQD33Accident · No injuriesClosedBoeing E75N1 · Animas, NMNTSB NYC76FNE33Accident · Serious injuriesClosedSchweizer SGS126 · Sterling, MANTSB LAX76FVM45Accident · Minor injuriesClosedCessna 172 · S.Luis Obispo, CANTSB LAX76FUA31Accident · Serious injuriesClosedAero Comdr 112A · Santa Ana, CANTSB FTW76FQH03Accident · 2 fatalClosedN. American TF-51D · Big Spring, TXNTSB NYC76FHM35Accident · Serious injuriesClosedPiper PA-28 · Succasunna, NJNTSB IAD76AI094Accident · 1 fatalClosedCessna 150H · Petersburg, VANTSB NYC76AN122Accident · Minor injuriesClosedBeech 99 · Ellsworth, MENTSB DEN76FTE91Accident · Minor injuriesClosedPiper PA-28 · Peyton, CONTSB ANC76AA124Accident · Minor injuriesClosedCessna 185F · Cordova, AKNTSB MIA7LDLD77Accident · No injuriesClosedBeech 65-80 · Lake Placid, FLNTSB FTW76FPG98Accident · Serious injuriesClosedCessna 150J · Batesville, ARNTSB DEN76DQA57Accident · No injuriesClosedHughes 269A-1 · Milagro, NMNTSB MKC76AK073Accident · 2 fatalClosedBell 47J-2A · Branson, MONTSB MIA76AM104Accident · 2 fatalClosedBeech B95A · Defuniak Sprgs, FLNTSB CHI76FEP42Accident · Minor injuriesClosedMooney M20E · Grafton, WI