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 NYC74DNA19Accident · No injuriesClosedBeech P35 · Plymouth, MANTSB CHI74FEK06Accident · Serious injuriesClosedCessna 172 · Caledonia, OHNTSB FTW74DRG23Accident · Minor injuriesClosedAero Comdr 100 · Encinal, TXNTSB CHI74FEE25Accident · No injuriesClosedPiper PA-28 · Eglin, ILNTSB SEA74AYC20Accident · Serious injuriesClosedSorrell SNS-6 · Dallesport, WANTSB CHI74FEC15Accident · No injuriesClosedPiper PA-32 · Brooklyn, MINTSB FTW74FRG21Accident · No injuriesClosedPiper J3C-65 · Burnet, TXNTSB ANC74FAG73Accident · Serious injuriesClosedPiper PA-18 · Gulkana, AKNTSB ANC74DAA22Accident · No injuriesClosedCessna 180 · Kotzebue, AKNTSB MKC74FCA10Accident · No injuriesClosedGrumman G-164A · Charleston, MONTSB CHI74DEI21Accident · Minor injuriesClosedCessna 177 · Perrysville, OHNTSB MIA74FKG32Accident · Minor injuriesClosedCessna 414 · Perry, GANTSB LAX74FUG14Accident · No injuriesClosedCessna 182 · Rubidoux, CANTSB FTW74DPM09Accident · No injuriesClosedCessna 150 · Bristow, OKNTSB UNK73X0124Accident · Minor injuriesClosedBeech B95 · San Inez, MexicoNTSB IAD74AI020Accident · No injuriesClosedLear Jet 25 · Sevierville, TNNTSB OAK74FVG14Accident · Serious injuriesClosedPiper PA-28 · Dunsmuir, CANTSB NYC74AN030Accident · 1 fatalClosedBeech 95-B55 · East Boston, MANTSB IAD74DID15Accident · No injuriesClosedBellanca 8KCAB · Charlottesvlle, VANTSB OAK74FVM10Accident · No injuriesClosedDelmar OTT OMS · Palo Alto, CANTSB ANC74DAA14Accident · No injuriesClosedPiper PA-20 · Bettles, AKNTSB MIA74DKG37Accident · No injuriesClosedBellanca 7ECA · Statesboro, GANTSB NYC74FNE07Accident · No injuriesClosedPiper PA-28 · Worcester, MANTSB FTW74FPD13Accident · Minor injuriesClosedPiper PA-24 · Quanah, TXNTSB CHI74FEK05Accident · No injuriesClosedCessna 150 · Newark, OHNTSB MIA74FLD25Accident · No injuriesClosedSchweizer SGS233 · Odessa, FLNTSB MIA74FKG29Accident · Serious injuriesClosedCessna 150G · Jonesboro, GANTSB NYC74FHA09Accident · Minor injuriesClosedPiper PA-22 · Prospectville, PANTSB DEN74DQA17Accident · No injuriesClosedSchweizer SGS126 · Moriarty, NMNTSB CHI74AC023Accident · 3 fatalClosedBeech B23 · Carbondale, ILNTSB OAK74FXQ12Accident · No injuriesClosedCessna T210H · Susanville, CANTSB NYC74AN022Accident · 1 fatalClosedCessna 172H · Wheeling, ILNTSB LAX74IL021Incident · No injuriesClosedBoeing 720B · Ontario, CANTSB IAD74II016Incident · No injuriesClosedDouglas DC-9 · Charlotte, NCNTSB OAK74FJA02Accident · Serious injuriesClosedPiper PA-28R · Waimea, HINTSB CHI74FEM22Accident · No injuriesClosedMooney M20A · Muskegon, MINTSB LAX74FUQ18Accident · 2 fatalClosedA.V.E.Mizar 210 · Oxnard, CANTSB IAD74DIJ05Accident · No injuriesClosedCessna 172 · Austinville, VANTSB OAK74FVD10Accident · Serious injuriesClosedBeech 19A · Stockton, CANTSB DCA74AZ005Accident · 6 fatalClosedDouglas DC-8 · King Cove, AKNTSB OAK74DVA19Accident · No injuriesClosedPiper PA-28 · Madera, CANTSB FTW74DPA06Accident · Serious injuriesClosedCessna 210 · Las Delicias, MexicoNTSB CHI74FET08Accident · Serious injuriesClosedCessna 182P · Valparaiso, INNTSB SEA74FYG14Accident · Minor injuriesClosedCessna 150F · La Crosse, WANTSB NYC74DNC21Accident · No injuriesClosedSchweizer 126 · Franconia, NHNTSB NYC74DFA08Accident · No injuriesClosedAmer Avco AA-5 · Mt Upton, NYNTSB MKC74AK009Accident · 1 fatalClosedLuscombe 8E · Harper, KSNTSB SEA74DYE09Accident · No injuriesClosedBell 205-A1 · Lester, WANTSB FTW74FRJ10Accident · Minor injuriesClosedPiper PA-28 · Shreveport, LANTSB NYC74FHD15Accident · No injuriesClosedPiper PA-28 · Berlin, NJ