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 CHI71FGA20Accident · No injuriesClosedTaylorcraft BC12-D · Phillipsburg, OHNTSB FTW71DPM24Accident · Serious injuriesClosedBeech B-95A · Mexico City, MexicoNTSB MKC71FCG48Accident · Serious injuriesClosedCessna 150 · Beverly, MONTSB MIA71OKT45Accident · No injuriesClosedBeech C-45H · T Cay, Burkina FasoNTSB MIA71DKJ55Accident · No injuriesClosedPiper PA-28 · Grove Hill, ALNTSB FTW71DQG64Accident · No injuriesClosedPiper PA-28 · Union, TXNTSB CHI71IC063Incident · No injuriesClosedBoeing 737 · Fort Wayne, INNTSB ANC71IA045Incident · No injuriesClosedBoeing 727 · Kotzebue, AKNTSB MIA71FKG67Accident · Serious injuriesClosedCessna A150K · Metter, GANTSB CHI71FBA32Accident · No injuriesClosedCessna 172 · Frankfort, INNTSB MKC71DCJ53Accident · Minor injuriesClosedPiper PA-28 · Beatrice, NENTSB MKC71DCJ52Accident · No injuriesClosedPiper PA-28 · Gothenburg, NENTSB NYC71DFJ27Accident · No injuriesClosedPiper PA-28 · Skaneateles, NYNTSB IAD71DIG25Accident · No injuriesClosedPiper J-3 · College Park, MDNTSB FTW71AF057Accident · 6 fatalClosedBeech 36 · Harrison, ARNTSB FTW71DRG91Accident · Serious injuriesClosedPiper PA-28 · Ensenada, MexicoNTSB CHI71DGD44Accident · Minor injuriesClosedAmer Avco AA1 · Ravenna, OHNTSB SEA71DXM26Accident · No injuriesClosedPiper PA-28 · Burley, IDNTSB NYC71DFA53Accident · Serious injuriesClosedSchweizer SGS123 · Cooperstown, NYNTSB MIA71FKT42Accident · No injuriesClosedPiper PA-23 · W.Palm Beach, FLNTSB FTW71FPG39Accident · Serious injuriesClosedLuscombe 8A · Hunter, ARNTSB DEN71FQA47Accident · Minor injuriesClosedCessna 172G · Albuquerque, NMNTSB MIA71AM076Accident · 8 fatalClosedVolpar E18S · Columbia, SCNTSB FTW71AF054Accident · 1 fatalClosedCessna 210H · Louise, TXNTSB CHI71AC060Accident · 1 fatalClosedCessna 411 · Germantown, WINTSB CHI71FLQ20Accident · No injuriesClosedPiper PA-28 · Fort Knox, KYNTSB SEA71DWG38Accident · No injuriesClosedBell 47G3 · Touchet, WANTSB MIA71AM074Accident · No injuriesClosedBeech 99A · Orlando, FLNTSB LAX71AL055Accident · 3 fatalClosedCessna 177 · Bg Bear Cty, CANTSB LAX71AL054Accident · Serious injuriesClosedCessna 150J · Corona, CANTSB ANC71DAG69Accident · No injuriesClosedCessna 170A · Anchorage, AKNTSB MKC71FDD20Accident · Minor injuriesClosedCessna 140 · Elbow Lake, MNNTSB MKC71FCD58Accident · Minor injuriesClosedPiper PA-31 · Iowa City, IANTSB MIA71AM071Accident · Minor injuriesClosedDouglas DC9-15 · Gulfport, MSNTSB FTW71AF048Accident · No injuriesClosedCessna 150H · W.Memphis, ARNTSB MKC71FCQ29Accident · No injuriesClosedHughes 269B · Wichita, KSNTSB IAD71DIA15Accident · No injuriesClosedPiper PA-28 · Quantico, VANTSB NYC71FFM27Incident · No injuriesClosedCessna 150 · Hartford, CTNTSB LAX71DUG46Accident · Serious injuriesClosedSlingsby T-53 · Elsinore, CANTSB FTW71AF046Accident · Serious injuriesClosedDouglas DC-3C · Shawnee, OKNTSB OAK72O0004Accident · No injuriesClosedBeech Volpar · Tam Ky, VMNTSB OAK71FVG54Accident · Minor injuriesClosedLuscombe 8E · Cordelia, CANTSB NYC71FFA50Accident · No injuriesClosedBeech A23-19 · Granville, NYNTSB MKC71FCQ28Accident · Serious injuriesClosedPiper PA-18A · Wichita, KSNTSB MKC71FCJ46Accident · Minor injuriesClosedCessna 180 · Scottsbluff, NENTSB FTW71FPD38Accident · No injuriesClosedPiper PA-12 · Keller, TXNTSB ANC71DAG67Accident · Minor injuriesClosedCessna 150 · Cordova, AKNTSB MKC72FCA25Accident · No injuriesClosedBeech V35 · St.Louis, MONTSB NYC71FHJ20Accident · Serious injuriesClosedPiper PA-28 · Amityville, NYNTSB LAX71AL049Accident · 2 fatalClosedCessna 150F · Imprial Bch, CA