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 FTW77FQG45Accident · No injuriesClosedBeech B23 · Gruver, TXNTSB FTW77DPD33Accident · Minor injuriesClosedErco 415-D · Fort Worth, TXNTSB CHI77FA061Accident · 1 fatalClosedCessna 172F · Grand Rapids, MINTSB CHI77DEP52Accident · No injuriesClosedBeech B-19 · Milwaukee, WINTSB IAD77FA054Accident · 3 fatalClosedBeech 95 · Fletcher, NCNTSB DEN78FTE77Accident · No injuriesClosedBeech D-18S · Trinidad, CONTSB CHI77DET29Accident · No injuriesClosedBeech BE-19 · Elkhart, INNTSB MIA77FKJ60Accident · No injuriesClosedCessna 177RG · Weaver, ALNTSB SEA77FA043Accident · 5 fatalClosedPiper PA-32R · Bernard Creek, IDNTSB MKC77FER66Accident · No injuriesClosedPiper PA-22 · Thief River, MNNTSB ANC77DAA39Accident · No injuriesClosedBellanca 7GCBC · Nenana, AKNTSB IAD77FIG28Accident · No injuriesClosedBeech 23 · Gaithersburg, MDNTSB CHI77FEE37Accident · Serious injuriesClosedSchweizer 1-26 · Huntley, ILNTSB ANC77DAA40Accident · No injuriesClosedCessna 170 · Delta Junction, AKNTSB OAK77FVA47Accident · Serious injuriesClosedCessna 150M · Madera, CANTSB NYC77FA072Accident · 1 fatalClosedPiper PA-31 · Cheektowaga, NYNTSB FTW77FRJ14Accident · No injuriesClosedGrumman G-164A · Lk Providence, LANTSB SEA77FYE29Accident · 1 fatalClosedTaylor B8M · Shelton, WANTSB OAK77DVA43Accident · No injuriesClosedCessna 150 · Madera, CANTSB MKC77DER64Accident · No injuriesClosedCessna 150 · Staples, MNNTSB DEN77FQG05Accident · Serious injuriesClosedMolino PIK-20 · Hobbs, NMNTSB CHI77FEP45Accident · No injuriesClosedBellanca 17-30A · Milwaukee, WINTSB NYC77DHA29Accident · No injuriesClosedCessna 172 · Bedminster, NJNTSB CHI77FEV35Accident · No injuriesClosedWoolums KR-2 · Jacksonville, ILNTSB OAK77FXQ27Accident · Serious injuriesClosedBeech A23A · Lake Tahoe, CANTSB NYC77DHJ30Accident · No injuriesClosedCessna 172 · Montauk, NYNTSB MKC77DCQ47Accident · Minor injuriesClosedPiper PA-28 · Hoxie, KSNTSB IAD77DA053Accident · 1 fatalClosedGrum Amer AA-1 · Vine Grove, KYNTSB CHI77FA059Accident · 1 fatalClosedCessna 150M · Peoria, ILNTSB SEA77DYM45Accident · No injuriesClosedCessna 172 · Madras, ORNTSB LAX77DUG52Accident · No injuriesClosedPiper PA-28 · Soggy Dry Lake, CANTSB SEA77DYM51Accident · No injuriesClosedCessna 150 · Dallas, ORNTSB OAK77FVD44Accident · No injuriesClosedCessna 150H · Oakland, CANTSB NYC77DFJ38Accident · No injuriesClosedLake 4-200 · Lakeville, NYNTSB MKC77FCQ46Accident · Minor injuriesClosedCessna U206G · Wichita, KSNTSB NYC77FHD19Accident · Serious injuriesClosedCessna 150 · Atlantic Cy, NJNTSB NYC77FFJ33Accident · Serious injuriesClosedPiper PA-18 · Elmira, NYNTSB MIA77FK648Accident · No injuriesClosedChampion 7HC · Savannah, GANTSB FTW77FPJ29Accident · Minor injuriesClosedVolksplane VP-1 · Oklahoma City, OKNTSB NYC77FA070Accident · 3 fatalClosedPiper PA-28R · Hingham, MANTSB CHI77FET22Accident · 1 fatalClosedPiper PA-28 · Huntington, INNTSB ANC77DAG80Accident · Minor injuriesClosedPiper PA-18 · Homer, AKNTSB MKC77FER58Accident · No injuriesClosedBaby GRT LK S-2 · Grand Rapids, MNNTSB MIA77DKG85Accident · Minor injuriesClosedLuscombe 8E · Lavonia, GANTSB FTW77DPG57Accident · No injuriesClosedAero Comdr S-2R · Beedeville, ARNTSB LAX77FUG51Accident · No injuriesClosedPiper PA-22 · Redlands, CANTSB SEA77FTA26Accident · No injuriesClosedPiper PA-28 · Billings, MTNTSB MKC77FCD25Accident · Minor injuriesClosedErco 415C · Runnells, IANTSB MKC77DER55Accident · No injuriesClosedPiper PA-28 · Minnesota Lake, MNNTSB MIA77FKJ55Accident · Minor injuriesClosedCessna 177G · Monroeville, AL