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 MKC74AK054Accident · 1 fatalClosedPiper PA-28 · Independence, MONTSB IAD74DKM43Accident · No injuriesClosedCessna 150 · Gastonia, NCNTSB IAD74FLJ33Accident · Minor injuriesClosedPiper PA-28 · Fayetteville, NCNTSB MKC74FCJ30Accident · Serious injuriesClosedAeronca 7AC · Lincoln, NENTSB DEN74FQA30Accident · No injuriesClosedBeech A36 · Bernardo, NMNTSB MIA74AM075Accident · 2 fatalClosedCessna 150L · Bessemer, ALNTSB SEA74DYE38Accident · No injuriesClosedCessna 172 · Bellingham, WANTSB CHI74FEM45Accident · No injuriesClosedPiper PA-28 · Holland, MINTSB CHI74FEI30Accident · No injuriesClosedPiper PA-28 · Shelby, OHNTSB LAX74OL067Accident · Serious injuriesClosedCessna 177 · Nogales, MexicoNTSB MKC74AK052Accident · 2 fatalClosedCessna 310P · Jefferson City, MONTSB MIA74AM072Accident · 1 fatalClosedPiper PA-24 · Pensacola, FLNTSB NYC74FHM16Accident · No injuriesClosedCessna 172H · Newburgh, NYNTSB MKC74DCQ26Accident · No injuriesClosedHughes 269C · Wichita, KSNTSB FTW74DPD35Accident · No injuriesClosedCessna 150J · Fort Worth, TXNTSB DEN74FTE58Accident · No injuriesClosedPiper PA-28R · Pueblo, CONTSB DEN74AD039Accident · 4 fatalClosedPiper PA-28R · Pueblo, CONTSB SEA74DYA24Accident · No injuriesClosedAeronca 7DC · Ontario, ORNTSB IAD74AI044Accident · Serious injuriesClosedBoeing 707 · Herndon, VANTSB FTW74DRG62Accident · No injuriesClosedCessna 150 · New Braunfels, TXNTSB FTW74AF061Accident · 2 fatalClosedCessna 150 · Boise City, OKNTSB MIA74DLG23Accident · Minor injuriesClosedChampion 7ECA · Plantersville, SCNTSB CHI74AC069Accident · 2 fatalClosedBeech 95-B55 · Grand Rapids, MINTSB MIA74DKT56Accident · Minor injuriesClosedPiper PA-22 · Naples, FLNTSB NYC74DFS24Accident · No injuriesClosedPiper PA-28 · Penn Yan, NYNTSB FTW74FRA28Accident · No injuriesClosedAeronca 7AC · Friendswood, TXNTSB MKC74FTG13Accident · No injuriesClosedCessna 150J · Grand Forks, NDNTSB MIA74FKJ45Accident · Serious injuriesClosedCessna 210B · Huntsville, ALNTSB LAX74DUG41Accident · Minor injuriesClosedSchweizer SGS232 · Llano, CANTSB DEN74FTE56Accident · Minor injuriesClosedTaylorbuilt 1 · Boulder, CONTSB CHI74FEE52Accident · Minor injuriesClosedAero Comdr 112 · Rockford, ILNTSB DEN74DTE52Accident · No injuriesClosedCessna 172K · Eagle, CONTSB MIA74DLD60Accident · No injuriesClosedPiper J54 · Summerfield, FLNTSB MIA74FLD62Accident · Minor injuriesClosedCessna 150 · Lake Wales, FLNTSB DCA74AZ016Accident · 96 fatalClosedBoeing 707 · Pago Pago, AntarcticaNTSB FTW74FRJ25Accident · Minor injuriesClosedPiper PA-23 · Center, TXNTSB IAD74FLT13Accident · No injuriesClosedCessna 150H · Memphis, TNNTSB FTW74FPG45Accident · No injuriesClosedCessna 182 · Heber Springs, ARNTSB LAX74DUG39Accident · No injuriesClosedSpezio DAL-1 · Redlands, CANTSB CHI74AC064Accident · 2 fatalClosedBeech B55 · Romulus, MINTSB OAK74DXQ20Accident · Minor injuriesClosedBell 47G3B1 · Wells, NVNTSB OAK74FJA14Accident · Minor injuriesClosedHiller Acft UH-12E · Honolulu, HINTSB ANC74DAG87Accident · No injuriesClosedCessna 180 · Grayling, AKNTSB MIA74DLG20Accident · No injuriesClosedCessna 150 · Union, SCNTSB IAD74DHD26Accident · Minor injuriesClosedCessna 150 · Cheswold, DENTSB OAK74AP035Accident · 2 fatalClosedCessna A150K · Reno, NVNTSB LAX74FUQ28Accident · Minor injuriesClosedNieuport N28 · Newhall, CANTSB ANC74AA054Accident · Minor injuriesClosedBell 206B · Deadhorse, AKNTSB FTW74FRG54Accident · Minor injuriesClosedCessna 140 · Portland, TXNTSB IAD74DKM36Accident · No injuriesClosedPiper PA-28 · Lexington, NC