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 FTW81DQD08Accident · No injuriesClosedBeech K35 · Alpine, TXNTSB DEN81FTC05Accident · No injuriesClosedCessna 172 · Rock Springs, WYNTSB LAX81FA018Accident · 4 fatalClosedBeech E33A · Montague, CANTSB DCA81AA003Accident · Serious injuriesClosedBoeing 727 · Yap, MicronesiaNTSB NYC81FNC06Accident · No injuriesClosedBeech A23-24 · Manchester, NHNTSB SEA81FA004Accident · 3 fatalClosedNavion A · Yakima, WANTSB LAX81DUJ18Accident · No injuriesClosedRaven S-55A · Sun City West, AZNTSB CHI81FEE07Accident · Serious injuriesClosedCessna 182 · Grayslake, ILNTSB MKC81FA006Accident · Minor injuriesClosedPiper PA-28 · Independence, MONTSB CHI81FEI07Accident · Serious injuriesClosedPiper PA-38 · Strongsville, OHNTSB NYC81FHD08Accident · Minor injuriesClosedEnstrom F-28A · Lima, PANTSB MIA81FLD09Accident · Serious injuriesClosedCessna 401A · Fort Pierce, FLNTSB FTW81DPD01Accident · Minor injuriesClosedBarnes AX7 · Ft Worth, TXNTSB DEN81FA010Accident · 5 fatalClosedMooney MZ0K · Grand Junction, CONTSB CHI81FEE06Accident · Serious injuriesClosedSonerai I · Lansing, ILNTSB NYC80FNA01Accident · No injuriesClosedBeech T-34A · Plymouth, MANTSB CHI81FEC03Accident · No injuriesClosedCessna 152 · Hillsdale, MINTSB MIA81DKT05Accident · No injuriesClosedCessna 150 · West Palmbeach, FLNTSB ATL81FA012Accident · No injuriesClosedCessna 182P · Richmond, VANTSB LAX81FJA03Accident · Minor injuriesClosedBell 206L · Kauai, HINTSB FTW81FPJ05Accident · No injuriesClosedMaule M-5 · Meno, OKNTSB CHI81FEP07Accident · No injuriesClosedCessna 150L · Spencer, WINTSB CHI81FA004Accident · 3 fatalClosedCessna 152 · Linden, MINTSB ATL81FKW04Accident · Minor injuriesClosedBeech E35 · Chattanooga, TNNTSB SEA81FYA04Accident · Serious injuriesClosedCessna 182A · Blackfoot, IDNTSB CHI81FEI04Accident · No injuriesClosedCessna T310R · Ravenna, OHNTSB FTW81FRJ03Accident · Minor injuriesClosedPiper PA-28 · Texarkana, TXNTSB DEN80FTE04Accident · No injuriesClosedHughes 369D · Alma, CONTSB MIA81FA009Accident · 2 fatalClosedCessna 152 · Cedar Key, FLNTSB NYC81FHD04Accident · Minor injuriesClosedPiper PA-24 · Delran Twnship, NJNTSB LAX81FVW03Accident · Serious injuriesClosedRaven RX-7 · Las Vegas, NVNTSB LAX81FVG03Accident · Serious injuriesClosedGrumman AA-5B · Fair Oaks, CANTSB MKC81FCA03Accident · No injuriesClosedCessna 172H · West Plains, MONTSB MIA81FA008Accident · 3 fatalClosedBeech E18S · Gainesville, FLNTSB LAX81FA009Accident · Minor injuriesClosedBellanca 17-30A · Phoenix, AZNTSB LAX81FA008Accident · 2 fatalClosedHughes 369 · Santa Rosa, CANTSB CHI81DEC02Accident · Serious injuriesClosedPiccard AX-6 · Metamora, MINTSB FTW81FRG05Accident · Minor injuriesClosedBeech 95-C55 · Brownsville, TXNTSB FTW81DRD03Accident · No injuriesClosedCessna 185F · Cameron, LANTSB NYC81FNC04Accident · Serious injuriesClosedPiper PA-28 · Limerick, MENTSB MIA81FA004Accident · 1 fatalClosedPiper PA-32R · Weeki Wachee, FLNTSB ANC81FA004Accident · 2 fatalClosedCessna U20GF · Deadhorse, AKNTSB FTW81FRG04Accident · No injuriesClosedTaylorcraft BC12 · Temple, TXNTSB ATL81FLG02Accident · Serious injuriesClosedAero Comdr 680FLP · Columbia, SCNTSB LAX80FUM02Accident · Minor injuriesClosedHughes 269C · Carlsbad, CANTSB DEN81FA006Accident · 1 fatalClosedCessna 182K · Rock Springs, WYNTSB MKC80DCG06Accident · No injuriesClosedCessna 172M · Greenfield, MONTSB NYC81FHD03Accident · No injuriesClosedPiper PA-34 · Burlington, NJNTSB LAX81FVD04Accident · 1 fatalClosedB/Gt Lakes BS-1 · Livermore, CANTSB CHI81FEE03Accident · Serious injuriesClosedCessna 182P · Romeoville, IL