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 CHI72FEG07Accident · Minor injuriesClosedPiper PA-28 · New Carlisle, OHNTSB CHI72FEE15Accident · No injuriesClosedPiper PA-28 · Grayslake, ILNTSB CHI72FET05Accident · Minor injuriesClosedTaylorcraft BC-12D · Syracuse, INNTSB CHI72FEE19Accident · No injuriesClosedCessna 150J · Grayslake, ILNTSB CHI72AC014Accident · 2 fatalClosedPiper PA-24 · Bardstown, KYNTSB NYC72DNE07Accident · No injuriesClosedPiper PA-23 · West Milbury, MANTSB LAX72FUA08Accident · No injuriesClosedCessna 150J · Fullerton, CANTSB FTW72DRG12Accident · Serious injuriesClosedCessna 210K · Meling Ranch, MexicoNTSB FTW72DPD13Accident · No injuriesClosedErco 415C · Commanche, TXNTSB MIA72DKG20Accident · No injuriesClosedGrumman G-164A · Vada, GANTSB NYC72FNE06Accident · Minor injuriesClosedChampion 7EC · Sherman, CTNTSB LAX72FUM07Accident · No injuriesClosedCessna 150G · San Diego, CANTSB NYC72DLJ05Accident · Minor injuriesClosedCessna 150K · Ft Bragg, NCNTSB MKC72FCJ13Accident · No injuriesClosedCessna 188 · Lexington, NENTSB OAK72FXQ05Accident · Serious injuriesClosedCessna 182E · Bieber, CANTSB NYC72DHA07Accident · Serious injuriesClosedSchweizer SGS134 · Hilltown, PANTSB FTW72FRJ04Accident · Serious injuriesClosedPiper PA-28 · Farmerville, LANTSB OAK72FXQ08Accident · Serious injuriesClosedAer-Pegaso M-100S · Minden, NVNTSB MKC72AK011Accident · 2 fatalClosedAeronca 7BCM · Shakopee, MNNTSB CHI72 EI08Accident · No injuriesClosedCessna 310 · Richmond Hts, OHNTSB SEA72FTA05Accident · No injuriesClosedCessna 150 · Sand Springs, MTNTSB NYC72FNA06Accident · Serious injuriesClosedBeech E33 · Block Island, RINTSB SEA72DYA06Accident · No injuriesClosedCessna 182 · Emmett, IDNTSB NYC72AN017Accident · Serious injuriesClosedCessna 180 · Greenville, MENTSB MIA72FLG04Accident · Serious injuriesClosedEnstrom F-28A · Saluda, SCNTSB FTW71FPD05Accident · 1 fatalClosedMooney M-20E · Grand Prairie, TXNTSB FTW72DRG10Accident · No injuriesClosedCessna 177 · Bandera, TXNTSB MIA72FKG13Accident · No injuriesClosedPitts Spcl S-1C · Williamson, GANTSB OAK72FVG13Accident · Minor injuriesClosedAmer Avco AA1 · Sacramento, CANTSB MKC72DCG08Accident · No injuriesClosedCessna 170A · Gainsville, MONTSB ANC72AA006Accident · 1 fatalClosedPiper PA-18 · Pt.Alexander, AKNTSB NYC72FFJ05Accident · Minor injuriesClosedCassutt Sport · Fulton, NYNTSB MIA72FKA02Accident · No injuriesClosedAmer Avco AA1 · San Sebastian, PRNTSB NYC72AN010Accident · 2 fatalClosedCessna 172K · Esmond, RINTSB LAX72FUA04Accident · No injuriesClosedPiper PA-20 · Buena Park, CANTSB FTW72FPD04Accident · Minor injuriesClosedVolaircraft 10A · Cleburne, TXNTSB DCA72RZ001Accident · 4 fatalClosedBoeing 707 · Manila, RPNTSB NYC72FFJ06Accident · Minor injuriesClosedMooney M20C · Minoa, NYNTSB FTW72FRA02Accident · No injuriesClosedCessna 182N · Houston, TXNTSB CHI72FEG02Accident · Minor injuriesClosedPiper PA-22 · Wilmington, OHNTSB CHI72FEC07Accident · Serious injuriesClosedCessna 190 · Sans Souci, MINTSB SEA72DYE05Accident · No injuriesClosedPiper PA-28 · Tacoma, WANTSB CHI72FET02Accident · Minor injuriesClosedBrantly 305 · Monroeville, INNTSB OAK72FVW02Accident · Minor injuriesClosedCessna 140 · Boulder City, NVNTSB CHI72FEV03Accident · No injuriesClosedStits SA3A · Macomb, ILNTSB ANC72DAA04Accident · No injuriesClosedPiper PA-28 · Kotzebue, AKNTSB OAK72FVG06Accident · Minor injuriesClosedBell 47G-5 · Placerville, CANTSB MKC72DCD06Accident · Minor injuriesClosedPiper PA-18 · Thayer, IANTSB NYC72DHA05Accident · No injuriesClosedPiper PA-28 · E.Stroudsburg, PANTSB MKC72AK005Accident · 2 fatalClosedBeech 35 · Mankato, KS