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 OAK74DVG57Accident · No injuriesClosedSchempp ST CIR · Kelseyville, CANTSB MKC74FCQ38Accident · Serious injuriesClosedCessna T337 · Wichita, KSNTSB LAX74FUG54Accident · Minor injuriesClosedCessna 150H · El Monte, CANTSB DEN74FTM15Accident · Minor injuriesClosedCessna 210B · Logan, UTNTSB FTW74FRA40Accident · No injuriesClosedCessna 150J · La Porte, TXNTSB FTW74FPA22Accident · No injuriesClosedCessna 150J · Dallas, TXNTSB OAK74DVG53Accident · Serious injuriesClosedSemco 105P · Napa, CANTSB NYC74DFJ32Accident · Serious injuriesClosedRaven S50A · Lafayette, NYNTSB FTW74DRD33Accident · No injuriesClosedGrumman G-164A · Gueydan, LANTSB MIA74DKT75Accident · No injuriesClosedCessna 206 · Miami, FLNTSB LAX74DUM26Accident · No injuriesClosedPiper PA-24 · Calexico, CANTSB MKC74DER47Accident · Minor injuriesClosedPiper PA-28 · Pipestone, MNNTSB MKC74DCQ36Accident · Serious injuriesClosedPiper PA-18 · Park, KSNTSB NYC74FNC41Accident · Minor injuriesClosedCessna 305A · N Conway, NHNTSB FTW74FRA39Accident · 1 fatalClosedBoeing A75N1 · Nome, TXNTSB DEN74FQD19Accident · No injuriesClosedPiper PA-28 · Alamogordo, NMNTSB NYC74FHD35Accident · Minor injuriesClosedPiper PA-28 · Bridgeport, NJNTSB NYC74DHJ26Accident · No injuriesClosedCessna 150G · Bayport, NYNTSB IAD74FID34Accident · Serious injuriesClosedBellanca 7ECA · Gloucester, VANTSB OAK74FVM25Accident · Minor injuriesClosedBeech T-34A · Prunedale, CANTSB OAK74AVA61Accident · No injuriesClosedNavion A · Patterson, CANTSB MIA74FKQ18Accident · Serious injuriesClosedCessna 150L · Hattiesburg, MSNTSB IAD74FIA13Accident · No injuriesClosedCessna 172M · Luray, VANTSB DEN74DTM14Accident · No injuriesClosedCessna 172I · Price, UTNTSB OAK74DXQ37Accident · No injuriesClosedSchweizer SGS232 · Yerrington, NVNTSB LAX74DUJ59Accident · Minor injuriesClosedSchweizer SGS233 · Phoenix, AZNTSB IAD74FID35Accident · No injuriesClosedPiper PA-39 · Tangier Isl, VANTSB CHI74FEM55Accident · Minor injuriesClosedAeronca 11AC · Grand Rapids, MINTSB CHI74FEC42Accident · Minor injuriesClosedPiper PA-22 · Cambridge Jt, MINTSB CHI74DEP45Accident · No injuriesClosedAmer Avco AA1-A · Brodhead, WINTSB CHI74DEE70Accident · Minor injuriesClosedErco 415-CD · Dekalb, ILNTSB FTW74OQD20Accident · 2 fatalClosedCessna 210 · Arteaga, MexicoNTSB CHI74DEM58Accident · No injuriesClosedChampion 7FC · Lansing, MINTSB NYC74FNE22Accident · No injuriesClosedCessna 172H · White Plains, NYNTSB DEN74DTM17Accident · No injuriesClosedCessna 150G · Cedar City, UTNTSB NYC74FNE18Accident · No injuriesClosedPiper PA-28 · Northampton, MANTSB LAX74FUM29Accident · Serious injuriesClosedVolksplane VP-1 · Escondido, CANTSB IAD74AI050Accident · 1 fatalClosedBeech D55 · Roanoke, VANTSB ANC74AA069Accident · Minor injuriesClosedBell 47G-2 · Seward, AKNTSB DCA74RZ019Accident · 107 fatalClosedBoeing 707 · Bali, IndonesiaNTSB NYC74DFA27Accident · Minor injuriesClosedCessna 150G · Oneonta, NYNTSB MIA74DKJ51Accident · No injuriesClosedCessna 180 · Elberta, ALNTSB IAD74FIA12Accident · Minor injuriesClosedBeech V35B · New Market, VANTSB IAD74DKM54Accident · No injuriesClosedMooney M20C · Asheville, NCNTSB NYC74FNA40Accident · No injuriesClosedPiper PA-28 · Norwood, MANTSB NYC74DNC39Accident · No injuriesClosedSchweizer SG1-26 · Hollis, NHNTSB DEN74DQG59Accident · No injuriesClosedCessna 150 · Tumcumcari, NMNTSB NYC74DGM24Accident · No injuriesClosedCessna 150 · Williamburg, PANTSB CHI74FEE66Accident · No injuriesClosedPiper PA-30 · Lansing, ILNTSB LAX74AL071Accident · 3 fatalClosedCessna 180 · Niland, CA