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 DCA81AA009Accident · 8 fatalClosedLockheed 1329 · White Plains, NYNTSB FTW81FA030Accident · 4 fatalClosedCessna 310R · Houma, LANTSB FTW81DA031Accident · No injuriesClosedTed Smith 601 · Hammond, LANTSB FTW81FRA16Accident · Serious injuriesClosedHelio Acft H-295 · Liberty, TXNTSB LAX81FVD10Accident · No injuriesClosedPiper PA-28R · Oakland, CANTSB ATL81FIG05Accident · Serious injuriesClosedPiper PA-28 · Edgewater, MDNTSB MIA81DKT25Accident · Minor injuriesClosedKnight Twstr · Miami, FLNTSB ATL81FIA02Accident · No injuriesClosedCessna 150 · Newburg, MDNTSB ATL81FA045Accident · 1 fatalClosedPiper PA-34 · Morgantown, WVNTSB ATL81FA043Accident · 7 fatalClosedCessna 340A · Chapel Hill, NCNTSB FTW81FRG12Accident · Serious injuriesClosedCessna 172M · Burnet, TXNTSB SEA81DYE13Accident · Minor injuriesClosedCessna 172 · Bellingham, WANTSB MKC81DCG21Accident · No injuriesClosedPiper PA-28 · Macon, MONTSB FTW81FA028Accident · 2 fatalClosedCessna 402B · Laredo, TXNTSB LAX81FVM11Accident · Minor injuriesClosedCessna 180 · Palo Alto, CANTSB LAX81FUG10Accident · No injuriesClosedPiper PA-23 · Hemet, CANTSB CHI81FA024Accident · 1 fatalClosedPiper PA-32 · Lyons Twp, WINTSB NYC81FHD12Accident · Serious injuriesClosedPiper PA-28 · Wilmington, DENTSB LAX81FUM12Accident · No injuriesClosedMooney M20C · Imperial, CANTSB CHI81FEC11Accident · No injuriesClosedLuscombe 8E · Belleville, MINTSB CHI81DEG07Accident · Minor injuriesClosedCessna 172 · Chesapeake, OHNTSB LAX81FA041Accident · 2 fatalClosedAero Comdr 681 · Winnemucca, NVNTSB ATL81FLQ11Accident · No injuriesClosedCessna 150M · Bowling Green, KYNTSB LAX81FVW07Accident · Serious injuriesClosedCessna 152 · Las Vegas, NVNTSB ANC81DA020Accident · No injuriesClosedCessna U206 · Clarks Point, AKNTSB NYC81FGM10Accident · No injuriesClosedAeronca 7EC · Butler, PANTSB FTW81DRJ09Accident · No injuriesClosedPiper PA-28 · Sterlington, LANTSB CHI81FER13Accident · Serious injuriesClosedPiper PA-32 · Webb Lake, MNNTSB ANC81DAG20Accident · No injuriesClosedPiper PA-18 · Copper Center, AKNTSB ATL81FA035Accident · 2 fatalClosedAeronca 11AC · Maryville, TNNTSB MKC81FA014Accident · 2 fatalClosedAero Comdr 500S · Springfield, MONTSB DCA81AA007Accident · 5 fatalClosedCessna 500 · Bluefield, WVNTSB CHI81FEE19Accident · Minor injuriesClosedBeech 58P · West Chicago, ILNTSB CHI81FEE18Accident · Serious injuriesClosedCessna 340A · Sugar Grove, ILNTSB DCA81AA006Accident · 7 fatalClosedBeech 99A · Spokane, WANTSB CHI81FEE16Accident · No injuriesClosedCessna 150 · Downers Grove, ILNTSB NYC81DFJ03Accident · No injuriesClosedCessna 172N · Syracuse, NYNTSB MIA81DLA10Accident · Minor injuriesClosedAeronca 7AC · Middleburg, FLNTSB DEN81FTE16Accident · Serious injuriesClosedBellanca 17-31 · Englwood, CONTSB CHI81FEI10Accident · Minor injuriesClosedCessna 150H · Youngstown, OHNTSB ATL81FK004Accident · No injuriesClosedPiper PA-38 · Tylertown, MSNTSB LAX81DVA19Accident · No injuriesClosedLake RV-3 · Bakersfield, CANTSB FTW81FA024Accident · 3 fatalClosedPiper PA-23 · New Orleans, LANTSB LAX81FUJ26Accident · 1 fatalClosedThunder P-40 · Scottsdale, AZNTSB ATL81DKJ06Accident · No injuriesClosedCessna 172 · Dothan, ALNTSB CHI81DA019Accident · No injuriesClosedCessna 402 · Lansing, MINTSB SEA81FYK04Accident · Serious injuriesClosedCessna P210 · Medford, ORNTSB LAX81DUJ28Accident · No injuriesClosedRaven RX-6 · Peoria, AZNTSB MIA81FA033Accident · 3 fatalClosedCessna 182H · Gainesville, FLNTSB DEN81FTM05Accident · Minor injuriesClosedBell 206B · Vernal, UT