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 DEN74FQA01Accident · No injuriesClosedCessna 150L · Albuquerque, NMNTSB DEN74AD001Accident · 2 fatalClosedAmer Avco AA1-B · Boulder, CONTSB CHI74FEM01Accident · 1 fatalClosedWikoff Photon · Ionia, MINTSB MIA73AM116Accident · 1 fatalClosedPiper PA-24 · Panama City, FLNTSB FTW73AF075Accident · 3 fatalClosedPiper PA-28 · Raymondville, TXNTSB ANC73DAG97Accident · Minor injuriesClosedAeronca 7AC · Spenard, AKNTSB FTW73FPJ25Accident · Minor injuriesClosedCessna 310Q · El Reno, OKNTSB SEA73DYA36Accident · No injuriesClosedBeech A35 · Stanley, IDNTSB IAD73AI019Accident · Serious injuriesClosedPiper PA-30B · Cordova, MDNTSB MIA73FLG50Accident · Serious injuriesClosedSchemp Cirrus · Chester, SCNTSB DEN73FTE90Accident · Serious injuriesClosedSchweizer SGS126 · Colo Springs, CONTSB SEA73DYA35Accident · No injuriesClosedCessna 180C · Burley, IDNTSB NYC73AN154Accident · Serious injuriesClosedDouglas DC-8 · Jamaica, NYNTSB MKC73FCJ49Accident · Minor injuriesClosedMooney M20A · Bassett, NENTSB MIA73FLA48Accident · No injuriesClosedPiper PA-28 · Archer, FLNTSB CHI73DEI50Accident · Minor injuriesClosedPiper PA-28 · Painesville, OHNTSB OAK73FVM38Accident · Serious injuriesClosedFairchild M-62A · Ben Lomond, CANTSB NYC73FHA27Accident · No injuriesClosedPiper PA-28 · Easton, PANTSB NYC73AN155Accident · 2 fatalClosedPiper PA-23 · Princeton, MENTSB FTW73FPM18Accident · No injuriesClosedErco 415-C · Tulsa, OKNTSB ANC74DAG05Accident · Minor injuriesClosedPiper PA-22 · Queens, AKNTSB DEN73DQA47Accident · Minor injuriesClosedCessna U206 · Corona, NMNTSB CHI73FEI48Accident · No injuriesClosedTaylorcraft BC12-D · Wadsworth, OHNTSB CHI73DEM68Accident · Minor injuriesClosedMooney M20 · Iron River, MINTSB OAK73FVD42Accident · Minor injuriesClosedCessna 150 · San Leandro, CANTSB MKC73DCG53Accident · Minor injuriesClosedSchweizer 1-23H · Grain Valley, MONTSB CHI73IC098Incident · No injuriesClosedDouglas DC-8 · Chicago, ILNTSB MIA73DLD88Accident · Minor injuriesClosedSchweizer SGS126 · Oviedo, FLNTSB LAX73FUJ84Accident · Serious injuriesClosedBeech G33 · Flagstaff, AZNTSB IAD73DKM46Accident · No injuriesClosedPiper PA-23 · Liberty, NCNTSB FTW73DRA36Accident · Minor injuriesClosedCessna 150H · Cleveland, TXNTSB OAK73AP044Accident · 2 fatalClosedCessna 150H · Tracy, CANTSB NYC73FHJ20Accident · No injuriesClosedCessna 150 · Aquebogue, NYNTSB SEA73DYC33Accident · No injuriesClosedCessna 182 · Sandy, ORNTSB NYC74FHD20Accident · 1 fatalClosedJeanie 2 Teenie · Tuckerton, NJNTSB NYC73FHM33Accident · Serious injuriesClosedCessna 150K · Hackensack, NJNTSB MIA73DKJ68Accident · No injuriesClosedPiper PA-30 · Greenville, ALNTSB LAX73FUD09Accident · Serious injuriesClosedCessna 210C · Los Angeles, CANTSB IAD73DKM45Accident · No injuriesClosedBeech E35 · Spruce Pine, NCNTSB CHI73FEG27Accident · No injuriesClosedBensen B-8M · Amelia, OHNTSB CHI73DEK27Accident · No injuriesClosedCessna 140 · Spring Mtn, OHNTSB FTW73FPD42Accident · Minor injuriesClosedCessna 150L · Saginaw, TXNTSB CHI73FEM67Accident · No injuriesClosedCessna 182 · Clare, MINTSB MKC73FCQ36Accident · No injuriesClosedHughes 369HS · Wichita, KSNTSB MKC73FTG19Accident · Minor injuriesClosedSirocco MJ5 · Minot, NDNTSB LAX73FUG61Accident · No injuriesClosedCessna 150 · Corona, CANTSB CHI73AC097Accident · 2 fatalClosedCessna 180C · S Fox Is, MINTSB ANC73AA051Accident · Serious injuriesClosedGrumman G-44A · Dillingham, AKNTSB SEA73DYI17Accident · Serious injuriesClosedJeanie Teenie · Central Pt, ORNTSB MKC73DCJ46Accident · No injuriesClosedPiper PA-22 · Nebraska Cty, NE