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 ATL81DKJ31Accident · Minor injuriesClosedCessna 150 · Huntsville, ALNTSB MKC81FCG53Accident · Serious injuriesClosedFlybaby 1A-BIS · Paola, KSNTSB SEA81DYA22Accident · Serious injuriesClosedCessna 150M · Driggs, IDNTSB NYC81FNE26Accident · No injuriesClosedPiper PA-24 · E.Hartford, CTNTSB MIA81FA104Accident · 2 fatalClosedBeech H18 · Ft.Lauderdale, FLNTSB LAX81FVG60Accident · No injuriesClosedErco 415-CD · Sacramento, CANTSB FTW81FPD36Accident · No injuriesClosedPiper PA-38 · Ft Worth, TXNTSB FTW81FPG61Accident · No injuriesClosedPiper PA-23 · Malvern, ARNTSB CHI81FEV30Accident · No injuriesClosedLuscombe 8E · Atwood, ILNTSB FTW81FRA35Accident · No injuriesClosedCessna 172 · Beaumont, TXNTSB LAX81FUA13Accident · Minor injuriesClosedCessna 421 · Long Beach, CANTSB LAX81DUQ28Accident · No injuriesClosedGlobe Swift GC1B · Mojave, CANTSB FTW81FRG58Accident · No injuriesClosedSnow AT-301 · San Benito, TXNTSB FTW81FPD35Accident · Minor injuriesClosedWindwagon Bohls · Arlington, TXNTSB ANC81DA096Accident · No injuriesClosedHughes 369HS · Ketchikan, AKNTSB MKC81FA050Accident · Serious injuriesClosedBeech 65 · Spirit Lake, IANTSB DEN81FTE66Accident · Serious injuriesClosedAeronca 7ECA · Akron, CONTSB CHI81FEI21Accident · No injuriesClosedPiper PA-22 · North Canton, OHNTSB NYC81FFJ21Accident · Minor injuriesClosedNeukom S3 · Horseheads, NYNTSB MIA81DKT86Accident · No injuriesClosedCessna 150 · Key West, FLNTSB DEN81FA056Accident · 2 fatalClosedCessna 150M · Sidney, MTNTSB CHI81FER56Accident · Minor injuriesClosedPiper PA-22 · Intl Falls, MNNTSB NYC81FFJ20Accident · No injuriesClosedCessna 170 · Great Valley, NYNTSB FTW81FQA41Accident · No injuriesClosedSchweizer 1-26 · Moriarty, NMNTSB NYC81FHM11Accident · Serious injuriesClosedBeech H35 · Wappingers Fls, NYNTSB FTW81DRA49Accident · No injuriesClosedAeronca 7EC · Laporte, TXNTSB ATL81FLG17Accident · Serious injuriesClosedPiper PA-28 · Mcclellanville, SCNTSB FTW81FQA40Accident · No injuriesClosedPiper PA-25 · Dexter, NMNTSB DEN81FA054Accident · 1 fatalClosedPiper PA-34 · Price, UTNTSB CHI81FA081Accident · 1 fatalClosedCessna 152 · Minneapolis, MNNTSB SEA81FYE36Accident · No injuriesClosedPietenpol GN-2 · Friday Harbor, WANTSB MKC81DCG52Accident · No injuriesClosedCessna 150 · Lees Summit, MONTSB SEA81DYP30Accident · Minor injuriesClosedPiper PA-22 · Coulee City, WANTSB FTW81DRJ24Accident · Minor injuriesClosedCessna 152 · Delhi, LANTSB MIA81DKJ13Accident · No injuriesClosedBeech C-24R · Crestview, FLNTSB DEN81FTG14Accident · Minor injuriesClosedBellanca 17-30A · Williston, NDNTSB DEN81DTE60Accident · No injuriesClosedCessna 172N · Durango, CONTSB CHI81FEM32Accident · No injuriesClosedPiper PA-31 · Mt Pleasant, MINTSB LAX81FVD33Accident · No injuriesClosedCessna 140 · San Rafael, CANTSB CHI81DEP39Accident · No injuriesClosedLuscombe 8A · Egg Harbor, WINTSB CHI81FA078Accident · 2 fatalClosedCessna 340A · St Charles, ILNTSB SEA81FA046Accident · No injuriesClosedBeech V35B · Sequim, WANTSB NYC81DHA18Accident · No injuriesClosedPiper PA-38 · Easton, PANTSB NYC81FFA20Accident · No injuriesClosedChristen Eagle · Duanesburg, NYNTSB ATL81FLG15Accident · Minor injuriesClosedBeech C24R · Bennettsville, SCNTSB ATL81FA095Accident · Serious injuriesClosedCessna 172L · Banner Elk, NCNTSB NYC81FGM23Accident · No injuriesClosedPiper PA-28 · Baggaley, PANTSB FTW81FQG42Accident · Serious injuriesClosedSchneider LS-4 · Hobbs, NMNTSB DEN81FTE58Accident · No injuriesClosedBeech 23 · Eaton, CONTSB ATL81FKM14Accident · Serious injuriesClosedPiper PA-32R · Asheville, NC