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 IAD71FLJ25Accident · Minor injuriesClosedCessna 150L · Durham, NCNTSB DEN71FTE01Accident · No injuriesClosedCessna 150 · Broomfield, CONTSB DEN71DQA54Accident · No injuriesClosedPiper PA-18 · Roswell, NMNTSB MKC71FER63Accident · Minor injuriesClosedCessna 180E · Lutsen, MNNTSB LAX71FUG86Accident · Serious injuriesClosedCessna 150 · Corona, CANTSB NYC71FGM46Accident · Minor injuriesClosedCessna 150F · Monroeville, PANTSB MKC71DTK29Accident · No injuriesClosedAlouette 2 · Lake Norden, SDNTSB MKC71DCG69Accident · Minor injuriesClosedCessna 150 · Kirksville, MONTSB FTW71FRH27Accident · Minor injuriesClosedPiper PA-32 · Llano, TXNTSB FTW71FRH26Accident · Serious injuriesClosedSchweizer SGS2-8 · Georgetown, TXNTSB FTW71FRA57Accident · Serious injuriesClosedCessna 172 · Port Bolivar, TXNTSB OAK71FVA72Accident · Minor injuriesClosedBellanca 14-19 · Fresno, CANTSB MIA71AM096Accident · 3 fatalClosedBeech 95-B55 · Ellabelle, GANTSB FTW71FPD55Accident · No injuriesClosedCessna 310 · Albany, TXNTSB CHI71DEE82Accident · No injuriesClosedBeech B23 · Joliet, ILNTSB NYC71FFJ35Accident · No injuriesClosedBeech 35 · Fulton, NYNTSB MIA71FKQ34Accident · Minor injuriesClosedPiper J3C · Minter City, MSNTSB SEA71FYG52Accident · No injuriesClosedCessna 172 · Electric Cty, WANTSB CHI71FEV40Accident · No injuriesClosedCessna 150 · Manito, ILNTSB NYC71FHD47Accident · Minor injuriesClosedChampion 7AC · Bargaintown, NJNTSB LAX71FUQ79Accident · No injuriesClosedPiper PA-22 · Quartz Hill, CANTSB MKC71FER59Accident · Serious injuriesClosedNavion A · Minneapolis, MNNTSB CHI71FEA36Accident · No injuriesClosedCessna 182 · Muncie, INNTSB NYC71FHJ26Accident · No injuriesClosedCessna 310D · Mattituck, NYNTSB NYC71FGT17Accident · Minor injuriesClosedPiper PA-22 · Bloomsburg, PANTSB CHI71DEP50Accident · Minor injuriesClosedCessna 337 · Land O Lakes, WINTSB CHI71AC082Accident · 2 fatalClosedBeech C35 · Cloverland, INNTSB MKC71DTG26Accident · No injuriesClosedCessna 172L · Bucyrus, NDNTSB MIA71FLT14Accident · Serious injuriesClosedCessna 150 · Memphis, TNNTSB LAX71AL065Accident · 2 fatalClosedCessna 140 · Phoenix, AZNTSB FTW71FPM25Accident · No injuriesClosedCessna 180 · Honobia, OKNTSB NYC71AN107Accident · 3 fatalClosedBeech E35 · Indiana, PANTSB LAX71DUJ87Accident · No injuriesClosedSchweizer 1-26 · Maricopa, AZNTSB OAK71FVG71Accident · 1 fatalClosedCessna A188 · Willows, CANTSB FTW71AF072Accident · 1 fatalClosedLaister LK-10A · Bracketville, TXNTSB LAX71AL064Accident · 1 fatalClosedPiper PA-28 · Phoenix, AZNTSB MIA71FLD60Accident · No injuriesClosedRepublic P-47N · Vero Beach, FLNTSB LAX71FUA58Accident · No injuriesClosedCessna T210K · Lakewood, CANTSB SEA71FYC36Accident · No injuriesClosedTaylorcraft BC12-D · Sandy, ORNTSB SEA71DYE30Accident · Minor injuriesClosedCessna 172 · Darrington, WANTSB IAD71DLJ21Accident · No injuriesClosedPiper PA-24 · Hatteras, NCNTSB CHI71FEK34Accident · Minor injuriesClosedCessna 177 · Ada, OHNTSB NYC71FGT19Accident · No injuriesClosedMaule M-4 · Fairfield, PANTSB MKC71FCD77Accident · No injuriesClosedPiper PA-28 · Iowa City, IANTSB MIA71FKJ50Accident · No injuriesClosedPiper PA-22 · Pell City, ALNTSB FTW71DRD39Accident · No injuriesClosedCessna 150 · Port Sulphur, TXNTSB DEN71AD039Accident · 1 fatalClosedCessna 175A · Rangely, CONTSB CHI71FEC43Accident · Minor injuriesClosedPiper PA-28 · Lambertville, MINTSB OAK71DVA69Accident · No injuriesClosedPiper PA-25 · Tulare, CANTSB LAX71FUJ83Accident · Serious injuriesClosedPiper PA-28 · Phoenix, AZ