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 CHI74FEG05Accident · Serious injuriesClosedMooney M20E · Harrison, OHNTSB SEA74FYE08Accident · Minor injuriesClosedCessna 172 · Kent, WANTSB MKC74DCJ12Accident · No injuriesClosedPiper PA-25 · Bertrand, NENTSB MIA74FLD13Accident · No injuriesClosedCessna 172K · Sebring, FLNTSB IAD74FID07Accident · Serious injuriesClosedBeech V35B · Wakefield, VANTSB CHI74FEP03Accident · No injuriesClosedBede BD-5J · Oshkosh, WINTSB MKC74AKO03Accident · 4 fatalClosedBellanca 14-19 · Kansas City, MONTSB DCA74AZ004Accident · 88 fatalClosedDouglas DC-9 · Boston, MANTSB MIA74AM010Accident · 2 fatalClosedAlon A-2 · Blue Springs, MSNTSB IAD74FID06Accident · No injuriesClosedErco 415-D · Ashland, VANTSB DEN74FTM03Accident · No injuriesClosedCessna 305A · Ogden, UTNTSB ANC74AA012Accident · No injuriesClosedGrumman G-21A · Kodiak, AKNTSB MKC74DCQ03Accident · Minor injuriesClosedPiper PA-25 · Grove, KSNTSB MKC74FCG04Accident · Serious injuriesClosedCessna 310 · Osage Beech, MONTSB FTW74FPD03Accident · No injuriesClosedCessna 172 · Iowa Park, TXNTSB CHI74DEP02Accident · Minor injuriesClosedCessna 150L · Stoughton, WINTSB DCA74AZ003Accident · 38 fatalClosedFairchild FH227B · St.Louis, MONTSB SEA74DYG06Accident · No injuriesClosedSchemp SHK-1 · Ephrata, WANTSB MKC74DCJ03Accident · No injuriesClosedPiper PA-28 · Ogallala, NENTSB ANC74DAA02Accident · No injuriesClosedCessna 172 · Wiseman, AKNTSB OAK74DVD04Accident · No injuriesClosedCessna 182 · Byron, CANTSB LAX74FUG06Accident · 1 fatalClosedJeanies Teenie · Victorville, CANTSB CHI74FEE04Accident · No injuriesClosedPiper PA-28 · Lansing, ILNTSB MKC74FCA02Accident · Minor injuriesClosedPiper PA-30 · Summersville, MONTSB IAD74FLQ02Accident · 1 fatalClosedCessna 182C · Mt.Sterling, KYNTSB DEN74AD002Accident · 2 fatalClosedPiper PA-30B · Aurora, CONTSB OAK74FVD03Accident · Serious injuriesClosedBeech B18 · Hayward, CANTSB LAX74FUG10Accident · Serious injuriesClosedAero Comdr 680 · Palm Spngs, CANTSB FTW74AF003Accident · 3 fatalClosedBeech A60 · New Orleans, LANTSB NYC74FNC08Accident · No injuriesClosedAmer Avco AA1 · Rochester, NHNTSB FTW74DRA04Accident · No injuriesClosedBoeing E75 · Beaumont, TXNTSB CHI74AC007Accident · 2 fatalClosedPiper PA-28R · Zanesville, OHNTSB LAX74FUG07Accident · No injuriesClosedCulver LCA · Corona, CANTSB IAD74FLJ09Accident · No injuriesClosedPiper PA-28 · Ocracoke, NCNTSB IAD74DID03Accident · No injuriesClosedAero Comdr A-9B · Parksley, VANTSB OAK74AP003Accident · 1 fatalClosedBeech A35 · Sacramento, CANTSB NYC74AN005Accident · 1 fatalClosedPiper PA-28 · Martha Vinyd, MANTSB ANC74AA002Accident · No injuriesClosedCurtis-Wrt C-46F · Beluga, AKNTSB OAK74DVG02Accident · No injuriesClosedPiper PA-28 · Napa, CANTSB LAX74AL003Accident · 5 fatalClosedPiper PA-34 · Goleta, CANTSB SEA74FYA01Accident · 1 fatalClosedSchleicher ASW-15 · Eagle, IDNTSB OAK74AP002Accident · 2 fatalClosedBeech V35 · Sonoma, CANTSB CHI74AEV01Accident · No injuriesClosedCessna 140 · Metamora, ILNTSB FTW74AF001Accident · 2 fatalClosedPiper PA-18 · Garland, TXNTSB MIA73FLD02Accident · Minor injuriesClosedBellanca 17-30 · Orlando, FLNTSB IAD74FKM02Accident · Serious injuriesClosedCessna 172H · Hickory, NCNTSB IAD74DKW02Accident · No injuriesClosedAmer Avco AA1 · Decatur, TNNTSB MKC74DTG01Accident · No injuriesClosedCessna 150 · Tuttle, NDNTSB FTW74FRG02Accident · No injuriesClosedMooney M20 · Corpus Chrsti, TXNTSB NYC74FHM01Accident · Minor injuriesClosedBellanca 17-30 · Linden, NJ