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 IAD79FA068Accident · Serious injuriesClosedPiper PA-32 · Hickory, NCNTSB DEN79FTE76Accident · No injuriesClosedBellanca 17-30 · Colorado Sprng, CONTSB MKC79DCG72Accident · No injuriesClosedCessna 150 · Odessa, MONTSB MIA79FLD84Accident · Minor injuriesClosedNavion A · Lakeland, FLNTSB CHI79FEC45Accident · No injuriesClosedLark 28B2 · Manchester, MINTSB NYC79FNE19Accident · No injuriesClosedLuscombe 8E · Plainville, CTNTSB LAX79DVA60Accident · No injuriesClosedBeech K35 · Oakdale, CANTSB CHI79FEK21Accident · Minor injuriesClosedCessna 120 · Fredericktown, OHNTSB CHI79FEI40Accident · Serious injuriesClosedGeronimo PA-23 · Middlefield, OHNTSB IAD79FIG13Accident · No injuriesClosedCessna 150 · Westminster, MDNTSB MKC79FA048Accident · 1 fatalClosedCessna 150J · Pleasant Hill, MONTSB LAX79FA066Accident · 2 fatalClosedPiper PA-30 · Redlands, CANTSB CHI79FER05Accident · Minor injuriesClosedTaylorcraft BC12-D · Woodville, WINTSB MIA79ORJ60Accident · No injuriesClosedSchweizer SGU222 · Montevallo, ALNTSB MIA79FA113Accident · 3 fatalClosedPiper PA-32 · Keystone, FLNTSB LAX79FUK01Accident · Serious injuriesClosedCessna 182F · Munds Park, AZNTSB MKC79FCG68Accident · Minor injuriesClosedBeech F35 · Theodosia, MONTSB MIA79DKJ59Accident · No injuriesClosedHiller Acft UH-12E · Tuscaloosa, ALNTSB NYC79DHA24Accident · Minor injuriesClosedCessna 172 · Lederach, PANTSB DEN79DQA45Accident · Serious injuriesClosedCessna 152 · Crown Point, NMNTSB MKC79FCQ41Accident · No injuriesClosedGrumman AA5B · Hoxie, KSNTSB LAX79DXQ31Accident · Minor injuriesClosedCessna 206 · Fallon, NVNTSB DEN79DTC23Accident · Minor injuriesClosedCessna 172 · Afton, WYNTSB CHI79FEP71Accident · Serious injuriesClosedMunninghoff FW-190 · Oshkosh, WINTSB CHI79FA065Accident · 1 fatalClosedBeech C-90 · Indianapolis, INNTSB MIA79FA111Accident · 2 fatalClosedCessna 150 · W Palm Beach, FLNTSB FTW79FQG52Accident · Serious injuriesClosedTern II · Littlefield, TXNTSB DEN79FA053Accident · No injuriesClosedCessna TU206 · Ft Collins, CONTSB NYC79FHA18Accident · No injuriesClosedCessna 172 · Germansville, PANTSB CHI79FEE78Accident · Minor injuriesClosedPiper PA-32R · West Chicago, ILNTSB NYC79FA071Accident · 3 fatalClosedPiper PA-30 · Groton, CTNTSB IAD79FIJ10Accident · Serious injuriesClosedForney F-1 · Fayetteville, WVNTSB ANC79DAA27Accident · No injuriesClosedCessna 170B · Kotzebue, AKNTSB MIA79DLA41Accident · No injuriesClosedCessna 150 · Camilla, GANTSB UNK79X0114Accident · Minor injuriesClosedCessna 150 · Willow Grove, PANTSB OAK79FA036Accident · 2 fatalClosedCessna 320A · Monterey, CANTSB DEN79FA052Accident · Serious injuriesClosedCessna P210 · Farmington, NMNTSB IAD79DLJ11Accident · No injuriesClosedPiper PA-22 · Ocean Isle, NCNTSB CHI79FEM30Accident · No injuriesClosedErco 415-C · Woodland, MINTSB CHI79FEE69Accident · Minor injuriesClosedBenson B-8M · Rockford, ILNTSB CHI79FEC37Accident · Serious injuriesClosedSchleicher AS-K13 · Adrian, MINTSB CHI79FEC36Accident · Minor injuriesClosedPiper PA-28 · Petersburg, MINTSB MKC79FA041Accident · 1 fatalClosedAmer Avco AA-1A · Versailles, MONTSB MIA79DKQ18Accident · Serious injuriesClosedNavion A · Crosby, MSNTSB FTW79FA097Accident · 1 fatalClosedCessna A185F · Lafayette, LANTSB FTW79FPD29Accident · No injuriesClosedCessna 150 · Abilene, TXNTSB MKC79DER54Accident · No injuriesClosedCessna 150 · St Cloud, MNNTSB LAX79FXQ22Accident · Minor injuriesClosedPiper PA-18 · Sierraville, CANTSB LAX79DVA48Accident · No injuriesClosedAir Tractor AT-301 · Mendota, CANTSB CHI79DEX42Accident · No injuriesClosedLuscombe 8A · Brownsburg, IN