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 LAX73FUM08Accident · Minor injuriesClosedCessna 170B · Niland, CANTSB ANC73FAG57Accident · No injuriesClosedPilatus PC6BH2 · Anchorage, AKNTSB NYC73AN066Accident · 4 fatalClosedBeech G33 · Colfax, NCNTSB MIA73FLT12Accident · Serious injuriesClosedPiper PA-30 · Memphis, TNNTSB CHI73DEG11Accident · No injuriesClosedCessna 150G · Oxford, OHNTSB LAX73DUQ20Accident · No injuriesClosedCessna 172 · Santa Ynez, CANTSB FTW73DPG33Accident · No injuriesClosedCessna 120 · Beebe, ARNTSB CHI73FEP30Accident · Minor injuriesClosedCessna 120 · Hartford, WINTSB MKC73DCG18Accident · No injuriesClosedCessna P206A · Springfield, MONTSB MKC73AK033Accident · No injuriesClosedCessna 172 · Chesterfield, MONTSB LAX73FUJ34Accident · Minor injuriesClosedCessna 172 · Scottsdale, AZNTSB NYC73AN065Accident · Serious injuriesClosedFairchild FH227B · Winston-Salem, NCNTSB NYC73AN060Accident · 3 fatalClosedBeech A36 · Morgantown, WVNTSB MIA73FKA05Accident · Serious injuriesClosedCessna 172C · Culebra, PRNTSB NYC73FHA10Accident · No injuriesClosedCessna 150K · Manville, NJNTSB FTW73FQD09Accident · No injuriesClosedCessna 150 · Fabens, TXNTSB MIA73DLD25Accident · No injuriesClosedCessna 172 · Daytona Beach, FLNTSB SEA73DYG18Accident · No injuriesClosedRobertson 182J · Connell, WANTSB MKC73AKO29Accident · No injuriesClosedCessna 150L · Ames, IANTSB DEN73FQA19Accident · Serious injuriesClosedSmith DSA-1 · Albuquerque, NMNTSB CHI73AC043Accident · 6 fatalClosedAero Comdr 500-A · Pekin, ILNTSB LAX73FUA18Accident · Minor injuriesClosedCessna 150J · Lomita, CANTSB DEN73FQA18Accident · No injuriesClosedCessna 206B · Moriarty, NMNTSB UNK73X0101Accident · 2 fatalClosedBeech 35P · Vancouver, CanadaNTSB DEN73AD016Accident · 1 fatalClosedCessna 182 · Denver, CONTSB ANC73AA029Accident · No injuriesClosedAero Comdr 680FL · Nome, AKNTSB MIA73FKG45Accident · Minor injuriesClosedHughes 269C · Chamblee, GANTSB NYC73FHD17Accident · No injuriesClosedPiper PA-30 · Philadelphia, PANTSB MIA73DLD19Accident · No injuriesClosedAeronca 7ECA · Arcadia, FLNTSB CHI73FEM21Accident · Minor injuriesClosedChampion 7ECA · Plainwell, MINTSB MKC73FTG08Accident · No injuriesClosedCessna 150K · Cavalier, NDNTSB DEN73FTE31Accident · Serious injuriesClosedCessna P206A · Nucla, CONTSB DEN73FTC11Accident · Minor injuriesClosedCessna T210F · Cheyenne, WYNTSB NYC73FFJ11Accident · No injuriesClosedCessna 140 · Etna, NYNTSB SEA73ASO09Accident · 1 fatalClosedPiper PA-23 · Dixie, WANTSB NYC73FNA23Accident · Minor injuriesClosedMooney M20E · Lexington, MANTSB NYC73FHD16Accident · No injuriesClosedPiper PA-28 · Bridgeport, NJNTSB CHI73ACO39Accident · 1 fatalClosedN. American SNJ-6 · Woodstock, ILNTSB MIA73DLG24Accident · No injuriesClosedCessna 172H · Landrum, SCNTSB LAX73FUJ25Accident · Minor injuriesClosedCorben Baby ACE B1 · Mesa, AZNTSB CHI73FEI15Accident · No injuriesClosedCessna 172 · Medina, OHNTSB OAK73FVW10Accident · No injuriesClosedPiper PA-28 · Henderson, NVNTSB OAK73FVM16Accident · Serious injuriesClosedMidget Mstg Cupp · San Jose, CANTSB CHI73DEM27Accident · No injuriesClosedPiper PA-32 · Lake City, MINTSB ANC73DAG48Accident · No injuriesClosedPiper PA-12 · Anchorage, AKNTSB ANC73AA025Accident · 1 fatalClosedPiper PA-18 · Iliamna, AKNTSB NYC73FGT04Accident · No injuriesClosedPiper PA-23 · Carlisle, PANTSB CHI73FLQ14Accident · Minor injuriesClosedCessna 150H · Louisville, KYNTSB CHI73AC036Accident · 1 fatalClosedSchleicher AS-K13 · Oxford, MINTSB OAK73FVA22Accident · No injuriesClosedPiper PA-22 · Riverdale, CA