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 NYC72FHM17Accident · No injuriesClosedPiper PA-28 · Belmar, NJNTSB CHI72FEK09Accident · No injuriesClosedCessna 150F · Zanesville, OHNTSB OAK72FVW19Accident · No injuriesClosedAero Comdr 100 · Mercury, NVNTSB MKC72FCG34Accident · 1 fatalClosedPiper PA-22 · Lansing, KSNTSB NYC72FHA26Accident · No injuriesClosedSchweizer SGS126 · Kutztown, PANTSB MIA72DKG48Accident · No injuriesClosedSchweizer 2-33A · Sylvania, GANTSB LAX72FUA24Accident · No injuriesClosedCessna 150H · Hntngtn Bch, CANTSB FTW72AF028Accident · 1 fatalClosedCessna 150K · Plano, TXNTSB MIA72AM046Accident · No injuriesClosedCessna 150K · Opa Locka, FLNTSB MIA72AM043Accident · No injuriesClosedTed Smith 600 · Hilton Head Is, SCNTSB ANC72FAG75Accident · No injuriesClosedCessna 207 · Anchorage, AKNTSB NYC72FLJ16Accident · No injuriesClosedCessna 150L · Macon, NCNTSB LAX72FUG33Accident · Serious injuriesClosedCessna 182M · Mentone, CANTSB CHI72AC044Accident · No injuriesClosedAero Comdr 200-D · Louisville, KYNTSB CHI72AC043Accident · 1 fatalClosedPiper PA-24 · Ypsilanti, MINTSB SEA72DYA20Accident · No injuriesClosedCessna 175 · Rexburg, IDNTSB OAK72FVW17Accident · Minor injuriesClosedRepublic RC-3 · Las Vegas, NVNTSB CHI72DEE39Accident · No injuriesClosedPiper PA-23 · Streator, ILNTSB LAX72DUQ39Accident · Minor injuriesClosedBellanca 14-13 · Saugus, CANTSB ANC72FAA18Accident · Serious injuriesClosedChampion 7GCBC · Fairbanks, AKNTSB FTW72AF025Accident · 3 fatalClosedPiper PA-28 · Tomball, TXNTSB CHI72FEM38Accident · No injuriesClosedDehavilland DH.115 · Kalamazoo, MINTSB FTW72FPD19Accident · No injuriesClosedCessna 140 · Denton, TXNTSB FTW72AF023Accident · Minor injuriesClosedPiper PA-28R · La Porte, TXNTSB MKC72DCG30Accident · No injuriesClosedN. American SNJ-5 · Grain Valley, MONTSB OAK72FVD23Accident · Minor injuriesClosedCessna 182 · Sonoma, CANTSB NYC72FFA23Accident · Minor injuriesClosedPiper PA-28 · Lake Placid, NYNTSB NYC72AN059Accident · 4 fatalClosedBeech B99 · Bath, PANTSB LAX72FUG28Accident · No injuriesClosedCessna 180 · Perris, CANTSB LAX72FUA20Accident · Serious injuriesClosedPiper PA-28 · Avalon, CANTSB LAX72FUQ36Accident · No injuriesClosedRepublic P-47G · Oxnard, CANTSB DCA72AZ004Accident · 16 fatalClosedBeech E18S · Peoria, ILNTSB NYC72FNC12Accident · No injuriesClosedTaylorcraft BC12-D · Frye, MENTSB NYC72FFA22Accident · Minor injuriesClosedCessna 150H · Frankfort, NYNTSB DEN72FTE34Accident · No injuriesClosedCessna 150 · Aurora, CONTSB CHI72FEE41Accident · No injuriesClosedCessna 150 · Seneca, ILNTSB NYC72FNC14Accident · Serious injuriesClosedPiper PA-28 · Manchester, VTNTSB MKC72FCD39Accident · No injuriesClosedAeronca 0-58B · Des Moines, IANTSB NYC72AN053Accident · 6 fatalClosedSwearingen SA26AT · Hot Springs, VANTSB MIA72DKG47Accident · No injuriesClosedGlobe GC-1B · Albany, GANTSB NYC72FNE14Accident · Serious injuriesClosedCessna 172H · Agawam, MANTSB LAX72FUG27Accident · Serious injuriesClosedCessna 172 · Chino, CANTSB LAX72DUJ51Accident · Minor injuriesClosedCessna 150 · Scottsdale, AZNTSB MKC72DCJ33Accident · No injuriesClosedBeech A23-24 · Oneill, NENTSB SEA72DYG16Accident · No injuriesClosedPiper PA-22 · Bovill, IDNTSB FTW72AF020Accident · 4 fatalClosedPiper PA-28 · San Antonio, TXNTSB MKC72FCD34Accident · Minor injuriesClosedCessna 150E · Spirit Lake, IANTSB LAX72FUG22Accident · Minor injuriesClosedLaister LK-10A · Elsinore, CANTSB FTW72FRA11Accident · Serious injuriesClosedPiper PA-24 · Lagrange, TXNTSB SEA72IS014Incident · No injuriesClosedBoeing 747 · Seattle, WA