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 MIA71DKD08Accident · No injuriesClosedBeech T-34B · Arlington, TNNTSB CHI71DGD20Accident · No injuriesClosedLuscombe 8C · Fremont, OHNTSB FTW71FRG28Accident · Minor injuriesClosedCessna 182A · San Marcos, TXNTSB SEA71AS016Accident · 3 fatalClosedBeech K35 · Pocatello, IDNTSB MIA71AM027Accident · 1 fatalClosedCessna 182B · Darlington, SCNTSB NYC71FHA16Accident · Minor injuriesClosedMooney M20C · Collegeville, PANTSB OAK71AP015Accident · 2 fatalClosedCessna 210D · Bass Lake, CANTSB MKC71AK015Accident · 2 fatalClosedCessna 172I · Vichy, MONTSB IAD71DIA11Accident · Minor injuriesClosedSchweizer SGS233 · Warrenton, VANTSB NYC71DFD11Accident · No injuriesClosedLangley Camper · Haverhill, MANTSB LAX71FUG13Accident · No injuriesClosedCessna 150H · Hesperia, CANTSB LAX71DUG16Accident · No injuriesClosedSchweizer SGS233 · Adelanto, CANTSB FTW71FQG32Accident · Serious injuriesClosedCessna 172H · Lubbock, TXNTSB FTW71FPA08Accident · Serious injuriesClosedCessna 120 · Murphy, TXNTSB CHI71DDJ16Accident · No injuriesClosedCessna 177 · Black Rvr Fls, WINTSB MKC71DDM23Accident · No injuriesClosedPiper PA-28 · Marshall, IANTSB FTW71AF010Accident · 3 fatalClosedAlon A-2 · Plainview, TXNTSB FTW71FRD17Accident · Minor injuriesClosedBellanca 14-13 · Melville, LANTSB DEN71DQA09Accident · Minor injuriesClosedCessna 177 · Espanola, NMNTSB NYC71FFJ14Accident · Serious injuriesClosedWittman W8 · Medina, NYNTSB MIA71FKG36Accident · Minor injuriesClosedPhares Breezy · Savannah, GANTSB MIA71FKD06Accident · Serious injuriesClosedCessna 150C · Memphis, TNNTSB FTW71FRD16Accident · Serious injuriesClosedPiper PA-18 · Cocodrie, LANTSB OAK71FVW07Accident · Serious injuriesClosedCessna 172G · Bishop, CANTSB NYC71FFM13Accident · Serious injuriesClosedSchweizer SGS134 · New Braintre, MANTSB NYC71DFA13Accident · No injuriesClosedPiper PA-28 · Basin Harbor, VTNTSB MKC71AK011Accident · 1 fatalClosedBeech E50 · Waseca, MNNTSB LAX71FUG11Accident · Serious injuriesClosedRackleff MAD 1 · Riverside, CANTSB CHI71DDJ14Accident · No injuriesClosedPiper PA-28 · Delavan, WINTSB SEA71FXM09Accident · Serious injuriesClosedPiper PA-12 · Rigby, IDNTSB NYC71FGM13Accident · Serious injuriesClosedEmons HP-10 · Hustontown, PANTSB CHI71FBQ15Accident · No injuriesClosedCessna 150 · Macomb, ILNTSB FTW71DRD11Accident · No injuriesClosedCessna 180F · Port Sulphur, LANTSB NYC71DHD23Accident · No injuriesClosedPiper PA-18 · Cape May, NJNTSB FTW71DRG22Accident · No injuriesClosedBeech D-18S · Guanajuato, MexicoNTSB CHI71FDW12Accident · No injuriesClosedCessna 150J · Ypsilanti, MINTSB NYC71FHA13Accident · No injuriesClosedHiller Acft UH-12A · Fountainville, PANTSB CHI71DGD13Accident · Minor injuriesClosedCessna 150 · Minerva, OHNTSB CHI71FBQ13Accident · No injuriesClosedPiper PA-24 · Mt.Carmel, ILNTSB MKC71AK010Accident · 2 fatalClosedCessna 150D · Osage, IANTSB ANC71DAG39Accident · No injuriesClosedPiper PA-20 · Togiak, AKNTSB SEA71FWD13Accident · No injuriesClosedCessna 210 · Seattle, WANTSB NYC71FFA11Accident · No injuriesClosedSikorsky S-58B · Fonda, NYNTSB CHI71DBD19Accident · No injuriesClosedCessna 150G · Wheeling, ILNTSB NYC71DHJ05Accident · Minor injuriesClosedBell 206A · Southampton, NYNTSB NYC71DFJ08Accident · No injuriesClosedCessna 150 · Wellsville, NYNTSB OAK71AP011Accident · 1 fatalClosedAerona 11AC · Mt.Hamilton, CANTSB SEA71DWD11Accident · Serious injuriesClosedCessna 172 · Federal Way, WANTSB OAK71DVG13Accident · No injuriesClosedCessna 172 · Vacaville, CANTSB CHI71FBD16Accident · Serious injuriesClosedBeech H35 · Wheeling, IL