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 IAD77FLJ34Accident · Minor injuriesClosedPiper PA-28 · Beaufort, NCNTSB FTW77DQD26Accident · No injuriesClosedCessna 177B · Pecos, TXNTSB SEA77DYE33Accident · Serious injuriesClosedLambert 201 · Silverdale, WANTSB NYC77FHM23Accident · Minor injuriesClosedPiper PA-28R · Fairfield, NJNTSB NYC77FGM38Accident · Minor injuriesClosedCessna 172 · Champion, PANTSB NYC77FA085Accident · 1 fatalClosedBeech P35 · Pittsburgh, PANTSB NYC77DHM24Accident · No injuriesClosedCessna 172 · Spring Valley, NYNTSB FTW77FPJ38Accident · No injuriesClosedPiper PA-28 · Oklahoma City, OKNTSB NYC77FHJ34Accident · No injuriesClosedBeech 65 · Islip, NYNTSB MIA77FKQ32Accident · Serious injuriesClosedAero Comdr 100-18 · Jackson, MSNTSB FTW77FRA32Accident · Minor injuriesClosedGrumman AA5 · League City, TXNTSB CHI77FEX43Accident · Serious injuriesClosedEvans VP-1 · Speedway, INNTSB SEA77FYA34Accident · Serious injuriesClosedPiper PA-25 · Marsing, IDNTSB SEA77DYM58Accident · Minor injuriesClosedCessna 172K · Orchard, WANTSB OAK77FA048Accident · No injuriesClosedPiper PA-31P · Modesto, CANTSB ANC77DAH34Accident · Serious injuriesClosedCessna 140 · Kenai, AKNTSB IAD77FIJ10Accident · Serious injuriesClosedBeech C23 · Charleston, WVNTSB ANC77FA074Accident · 2 fatalClosedPiper PA-12 · Delta Junction, AKNTSB LAX77FUG58Accident · 1 fatalClosedPiper PA-28 · 29 Palms, CANTSB IAD77FLJ28Accident · Serious injuriesClosedLuscombe 8F · Louisburg, NCNTSB CHI77FEK26Accident · No injuriesClosedSchleicher K-7 · Montpelier, OHNTSB CHI77FEE44Accident · Minor injuriesClosedCessna 150M · Plainfield, ILNTSB CHI77DEP50Accident · No injuriesClosedSchweizer 1-26B · West Bend, WINTSB MKC77DCQ55Accident · No injuriesClosedPiper PA-18 · Manhatton, KSNTSB IAD77FA059Accident · 4 fatalClosedBeech 58 · Parkersburg, WVNTSB CHI77FEI36Accident · No injuriesClosedPiper PA-22 · Woodville, OHNTSB OAK77FXQ32Accident · No injuriesClosedLake LA4 · Lovelock, NVNTSB NYC77FFJ39Accident · No injuriesClosedCessna 150J · Binghamton, NYNTSB CHI77FEK28Accident · No injuriesClosedPiper PA-28 · Lima, OHNTSB CHI77FEE41Accident · No injuriesClosedCessna 150C · Plato Center, ILNTSB NYC77FHD25Accident · No injuriesClosedGrumman G-164A · Vineland, NYNTSB FTW77FQD24Accident · No injuriesClosedPiper PA-28 · El Paso, TXNTSB NYC77FGM34Accident · No injuriesClosedAcrojet Spcl · Latrobe, PANTSB CHI77FEI35Accident · Minor injuriesClosedMooney M20B · Youngstown, OHNTSB ANC77FAG91Accident · Serious injuriesClosedBeech C-45G · Kasilof, AKNTSB OAK77FA046Accident · 2 fatalClosedBeech A36 · Crescent City, CANTSB MIA77FLA44Accident · 1 fatalClosedBellanca 17-30A · Jacksonville, FLNTSB FTW77FPA24Accident · 1 fatalClosedGersbach Sdwndr · Hebron, TXNTSB DEN77FTC23Accident · Minor injuriesClosedPiper PA16 · Douglas, WYNTSB DEN77DQD23Accident · Minor injuriesClosedPiper PA-22 · Silver City, NMNTSB ANC77DAH06Accident · No injuriesClosedCessna 180 · Green Butte, AKNTSB SEA77DA046Accident · Minor injuriesClosedCessna 210L · Klamath Falls, ORNTSB ANC77DAG99Accident · No injuriesClosedPiper PA-18 · Anchorage, AKNTSB MKC77FER70Accident · No injuriesClosedTayorcraft BCS-12 · Coon Lake, MNNTSB LAX77FUA19Accident · Serious injuriesClosedCessna 150 · Huntington Bch, CANTSB ANC77DA070Accident · No injuriesClosedCessna 206E · Tatitlek, AKNTSB SEA77DYM60Accident · No injuriesClosedBeech B35 · Dallas, ORNTSB CHI77FEP47Accident · Serious injuriesClosedCessna 172 · Lake Geneva, WINTSB ANC77FA065Accident · 5 fatalClosedBeech E90 · Sitka, AKNTSB NYC77FNA25Accident · Serious injuriesClosedPiper PA-28 · Edgartown, MA