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 LAX71FUQ11Accident · No injuriesClosedCessna 177 · Van Nuys, CANTSB IAD71FIG09Accident · No injuriesClosedCessna 170B · Taneytown, MDNTSB MIA71FKG22Accident · Minor injuriesClosedPiper PA-28R · East Point, GANTSB LAX71DUJ17Accident · Minor injuriesClosedAero Comdr 100 · Flagstaff, AZNTSB CHI71FDJ13Accident · No injuriesClosedLuscombe 8E · Cottage Grove, WINTSB DEN71AD005Accident · 2 fatalClosedMooney M20E · Cody, WYNTSB OAK71FVD05Accident · Serious injuriesClosedN.American P-51D · Concord, CANTSB MIA71DLG06Accident · Minor injuriesClosedSchleicher ASW-15 · Chester, SCNTSB IAD71DIJ07Accident · Serious injuriesClosedMooney M20C · Huntington, WVNTSB CHI71FDW10Accident · Serious injuriesClosedCessna 172E · Pontiac, MINTSB MIA71AM016Accident · 2 fatalClosedHughes 269B · Memphis, TNNTSB OAK71FVM08Accident · 1 fatalClosedGlobe GC-1B · Morgan Hill, CANTSB CHI71FGD12Accident · No injuriesClosedCessna 150 · Tiffin, OHNTSB SEA71FDA04Accident · No injuriesClosedPiper PA-18A · Garryowen, MTNTSB LAX71DUG09Accident · No injuriesClosedPiper PA-28 · El Monte, CANTSB FTW71DPG18Accident · Minor injuriesClosedCessna 210A · Monterrey, MexicoNTSB MIA71FKD04Accident · No injuriesClosedPiper PA-28 · Birmingham, ALNTSB NYC71DHG03Accident · Minor injuriesClosedCessna 150H · Herricksville, PANTSB NYC71AN018Accident · 1 fatalClosedN.American B-25J · Orange, MANTSB LAX71FUA14Accident · No injuriesClosedBeech P35 · Huntngton B, CANTSB ANC71AA010Accident · 2 fatalClosedPiper J3C-65 · Gulkana, AKNTSB DCA71R0002Accident · Serious injuriesClosedConvair 990 · Acapulco, MexicoNTSB CHI71AC012Accident · Serious injuriesClosedCessna 402 · Watertown, WINTSB SEA71DWD09Accident · Minor injuriesClosedBell 47G3B1 · Diablo, WANTSB MKC71DDQ05Accident · No injuriesClosedPiper PA-18 · Opal, SDNTSB MKC71FCJ14Accident · 1 fatalClosedPiper PA-25 · Minden, NENTSB NYC71FGM07Accident · No injuriesClosedPiper PA-24 · Butler, PANTSB DEN71AD004Accident · No injuriesClosedCessna 177 · Montrose, CONTSB SEA71DWD08Accident · No injuriesClosedSchweizer SGS233 · North Plains, ORNTSB MKC71DCD17Accident · No injuriesClosedCessna 150K · Iowa Falls, IANTSB MIA71DKJ08Accident · No injuriesClosedPiper PA-32 · Marion Junctn, ALNTSB IAD71FIG06Accident · Serious injuriesClosedErco 415-C · Cumberland, MDNTSB FTW71DRA09Accident · No injuriesClosedPiper PA-32 · Beeville, TXNTSB FTW71DPJ10Accident · Minor injuriesClosedCessna 172K · Eakly, OKNTSB NYC71AN013Accident · 1 fatalClosedPiper PA-23 · Muncy, PANTSB CAN71AC905Accident · 3 fatalClosedCessna 170B · Nestor Falls, CanadaNTSB NYC71FFM05Accident · Minor injuriesClosedCessna 172K · Harwinton, CTNTSB NYC71FFJ02Accident · Serious injuriesClosedStinson 108-3 · Jamestown, NYNTSB MKC71DCQ07Accident · No injuriesClosedNavion A · Meade, KSNTSB NYC71FHD12Accident · Serious injuriesClosedPiper PA-28R · Marlton, NJNTSB IAD71FIJ05Accident · Serious injuriesClosedCessna 175A · Clarksburg, WVNTSB FTW71DRG10Accident · Minor injuriesClosedCessna 150J · Temple, TXNTSB DCA71AZ002Accident · 4 fatalClosedDouglas DC-8 · Naha Ab, JANTSB FTW71FRD05Accident · Serious injuriesClosedCessna 182A · Covington, LANTSB FTW71DRG09Accident · Serious injuriesClosedAeronca 7BCM · Lampasas, TXNTSB DEN71DQD01Accident · No injuriesClosedPiper PA-24 · Rodeo, NMNTSB OAK71DVW02Accident · No injuriesClosedMooney M20B · Lone Pine, CANTSB SEA71FWD06Accident · Serious injuriesClosedCessna 170 · Lester, WANTSB CHI71FDJ05Accident · Minor injuriesClosedPiper PA-28 · Green Bay, WINTSB CHI71FBQ04Accident · No injuriesClosedStinson 108-1 · Ludlow, IL