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 CHI76DEI14Accident · Minor injuriesClosedBlanik L-13 · Canton, OHNTSB ANC76FAG51Accident · No injuriesClosedPiper PA-18 · Anchorage, AKNTSB LAX76FUM08Accident · No injuriesClosedCessna 150 · Ramona, CANTSB MKC76DER34Accident · No injuriesClosedPiper J-3 · Caledonia, MNNTSB SEA76FYA14Accident · Minor injuriesClosedCessna 182G · Marsing, IDNTSB SEA76FYG17Accident · Serious injuriesClosedBeech 19A · Quincy, WANTSB OAK76AP014Accident · 3 fatalClosedBeech A36 · Crescent City, CANTSB MKC76FCG26Accident · Minor injuriesClosedBeech F35 · Leawood, KSNTSB MKC76AK024Accident · 2 fatalClosedBeech N35 · Wichita, KSNTSB IAD76FKW13Accident · No injuriesClosedErco 415-C · Winchester, TNNTSB IAD76AI021Accident · Serious injuriesClosedCessna 310Q · Wilmington, NCNTSB FTW76FPD12Accident · No injuriesClosedAeronca 7AC · N.Richlnd Hlls, TXNTSB DEN76DTM09Accident · Minor injuriesClosedLuscombe 8E · Hanksville, UTNTSB CHI76FEE26Accident · Serious injuriesClosedGrum Amer AA1 · Naperville, ILNTSB MKC76FCG27Accident · No injuriesClosedPiper J3F-50 · Columbia, MONTSB MKC76DER30Accident · No injuriesClosedPiper PA-28 · Marshall, MNNTSB CHI75DEM14Accident · No injuriesClosedBeech E33 · Holland, MINTSB SEA76FTI14Accident · Minor injuriesClosedMaule M5210C · Bozeman, MTNTSB OAK76FVA16Accident · No injuriesClosedCessna 310 · Corcoran, CANTSB NYC76FNE09Accident · Minor injuriesClosedCessna 195B · Madison, CTNTSB MKC76FCQ19Accident · No injuriesClosedCessna 172B · Mankato, KSNTSB CHI76FEE24Accident · Minor injuriesClosedMooney A2A · Malta, ILNTSB ANC76DAG48Accident · No injuriesClosedCessna 180 · Palmer, AKNTSB SEA76FTA06Accident · Minor injuriesClosedPiper PA-18 · Powderville, MTNTSB IAD76AI018Accident · 1 fatalClosedCessna 150L · Louisville, KYNTSB IAD76FLQ05Accident · Serious injuriesClosedCessna 177A · London, KYNTSB IAD76FKW12Accident · Serious injuriesClosedCessna 172M · Nashville, TNNTSB FTW76DRD12Accident · No injuriesClosedGrum Amer AA1-B · Thibodaux, LANTSB FTW76DRD11Accident · No injuriesClosedCessna 185 · Lake Arthur, LANTSB CHI76FEE21Accident · Minor injuriesClosedCessna 150 · Dekalb, ILNTSB ANC76DAG41Accident · No injuriesClosedCessna 170B · Sparrevohn, AKNTSB IAD76FIG03Accident · No injuriesClosedPiper PA-28 · Frostburg, MDNTSB NYC76FFJ08Accident · Serious injuriesClosedAeronca 7AC · Albion, NYNTSB MKC76DCQ18Accident · No injuriesClosedBeech A23-24 · Liberal, KSNTSB MIA76DKT23Accident · Minor injuriesClosedCessna 150 · Pompano Beach, FLNTSB NYC76FHD09Accident · No injuriesClosedPiper PA-24 · Mt Laurel, NJNTSB IAD76DKM09Accident · No injuriesClosedCessna 182 · Midland, NCNTSB NYC76FHA13Accident · Minor injuriesClosedSchreder HP-11 · Blairstown, NJNTSB MKC76DCJ13Accident · Minor injuriesClosedPiper PA-28 · Oshkosh, NENTSB FTW76AF022Accident · 1 fatalClosedSemco TC-4 · Baton Rouge, LANTSB IAD76FGM07Accident · Minor injuriesClosedCessna 150G · New Cumberland, WVNTSB FTW76AF021Accident · 2 fatalClosedPiper PA-32 · Alexandria, LANTSB DEN76FQA15Accident · Serious injuriesClosedLongmire SP-3 · Albuquerque, NMNTSB MKC76FCG25Accident · Serious injuriesClosedLockheed 12A · Springfield, MONTSB CHI76FEM11Accident · No injuriesClosedBeech 35 · Manistee, MINTSB ANC76DAG34Accident · Serious injuriesClosedPiper PA-12 · Kenai, AKNTSB FTW76AF019Accident · 1 fatalClosedBeech 35 · Harrison, ARNTSB NYC76FNC20Accident · Minor injuriesClosedBeech B19 · Greenville, MENTSB SEA76FYC18Accident · No injuriesClosedCessna 175 · Tillamook, ORNTSB MIA76AM023Accident · Minor injuriesClosedBoeing 747 · San Juan, PR