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 DEN73DTE83Accident · No injuriesClosedPiper PA-28R · Cripple Crk, CONTSB MIA73FLG48Accident · No injuriesClosedCessna U206C · Little River, SCNTSB NYC73IN146Incident · No injuriesClosedLockheed 1011 · Philadelphia, PANTSB MKC73DCJ39Accident · Minor injuriesClosedGernr Evans WE-1 · Kimball, NENTSB FTW73AF071Accident · 1 fatalClosedBeech E18S · Tyler, TXNTSB SEA73AS035Accident · 1 fatalClosedCessna 182K · Snohomish, WANTSB MKC73FTG16Accident · No injuriesClosedPiper PA-32 · Bismarck, NDNTSB LAX73DUM37Accident · No injuriesClosedSchweizer SGS126 · Borrego Spg, CANTSB OAK73DVG67Accident · No injuriesClosedErco 415-C · Live Oak, CANTSB OAK73DJY12Accident · No injuriesClosedCessna 150 · Plaridel, RPNTSB LAX73DUG58Accident · Serious injuriesClosedSchweizer 2-33A · Elsinore, CANTSB SEA73DYG34Accident · No injuriesClosedGlasflugel H301B · Ephrata, WANTSB SEA73DYC29Accident · No injuriesClosedCessna 172H · Battleground, WANTSB IAD73FLJ33Accident · Serious injuriesClosedPiper PA-28 · Erwin, NCNTSB FTW73FRA32Accident · No injuriesClosedStinson 108-2 · Vidor, TXNTSB SEA73AS034Accident · 6 fatalClosedCessna T310Q · Cottage Grve, ORNTSB LAX73DUJ88Accident · Serious injuriesClosedCessna 177 · Peach Sprng, AZNTSB LAX73DUG61Accident · Serious injuriesClosedSchweizer SG2-33 · Adelanto, CANTSB ANC73AA047Accident · 1 fatalClosedChampion 7GCBC · Mcgrath, AKNTSB CHI73DEE63Accident · Minor injuriesClosedCessna 150L · Frankfort, ILNTSB CHI73FEP60Accident · Serious injuriesClosedPiper PA-24 · Madison, WINTSB FTW73FPD38Accident · No injuriesClosedBeech E35 · Smithfield, TXNTSB NYC73DFA35Accident · No injuriesClosedBeech B55 · Wurtsboro, NYNTSB MIA73DKJ60Accident · Minor injuriesClosedCessna 150H · Hazel Green, ALNTSB OAK73AP041Accident · 6 fatalClosedBeech G50 · Honolulu, HINTSB CHI73FEE59Accident · No injuriesClosedLuscombe 8A · Aurora, ILNTSB IAD73FID20Accident · 1 fatalClosedBannick T-100 · Buckingham, VANTSB DEN73DTE80Accident · No injuriesClosedPiper PA-28 · Longmont, CONTSB FTW73FRD28Accident · Minor injuriesClosedCessna 172 · Braithwaite, LANTSB MKC73FCA24Accident · Minor injuriesClosedCessna 310C · Chesterfield, MONTSB SEA73AS032Accident · 1 fatalClosedChampion 7GCB · North Plains, ORNTSB MKC73FCA26Accident · No injuriesClosedCessna 150J · Rolla, MONTSB LAX73FUG53Accident · No injuriesClosedNieuport 28 · Chino, CANTSB ANC74AA046Accident · 2 fatalClosedSwearingen SA26T · Deadhorse, AKNTSB FTW73DPJ18Accident · Minor injuriesClosedCessna 150L · Enid, OKNTSB CHI73FEC34Accident · No injuriesClosedMooney M20A · Pontiac, MINTSB OAK73DVD37Accident · No injuriesClosedAeronca 65-LA · Gualala, CANTSB SEA73DYG30Accident · No injuriesClosedPiper PA-24 · Othello, WANTSB SEA73DYE33Accident · No injuriesClosedPiper PA-28 · Hoquiam, WANTSB NYC73FNA48Accident · Serious injuriesClosedBlanik L-13 · Plymouth, MANTSB NYC73FNA47Accident · Serious injuriesClosedPiper PA-23 · Wenham, MANTSB LAX73FUQ31Accident · Minor injuriesClosedPiper PA-28 · Van Nuys, CANTSB CHI73FEC32Accident · No injuriesClosedPiper PA-28 · Salem, MINTSB NYC73AN139Accident · 4 fatalClosedBeech V35A · Methuen, MANTSB LAX73DUA55Accident · No injuriesClosedBoeing B75N1 · Delano, CANTSB FTW73DQD18Accident · Serious injuriesClosedCessna T210F · El Fuerte, MexicoNTSB NYC73FFJ22Accident · No injuriesClosedChampion 7GCBC · Cortland, NYNTSB MIA73FKG75Accident · Serious injuriesClosedCessna 150 · Chamblee, GANTSB FTW73AF066Accident · 1 fatalClosedCessna 182E · N.Little Rock, ARNTSB NYC73DHM30Accident · No injuriesClosedPiper PA-24 · Spring Valley, NY