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 DEN80FTK16Accident · Minor injuriesClosedCessna 177B · Sturgis, SDNTSB CHI80FEK22Accident · No injuriesClosedGrum Amer AA-5B · Columbus, OHNTSB CHI80DEP41Accident · No injuriesClosedBlanik L-13 · Middleton, WINTSB ANC80DAG75Accident · Minor injuriesClosedCessna 150 · Cantwell, AKNTSB ANC80DAA18Accident · No injuriesClosedCessna 180 · Brooks Range, AKNTSB LAX80DVA54Accident · No injuriesClosedPiper PA-28 · Pixley, CANTSB CHI80FEP40Accident · No injuriesClosedPitts S-1C · Wyocena, WINTSB ANC80DAG71Accident · Serious injuriesClosedPiper PA-18 · Alexander Lake, AKNTSB CHI80FEC24Accident · No injuriesClosedPiper PA-22 · Troy, MINTSB ATL80FKQ15Accident · No injuriesClosedCessna 152 · Ocean Springs, MSNTSB MKC80FA043Accident · Serious injuriesClosedCessna 401A · Spirit Lake, IANTSB CHI80FEE32Accident · No injuriesClosedCessna T210M · Huntley, ILNTSB CHI80DEE33Accident · No injuriesClosedCessna 172 · Kankakee, ILNTSB NYC80DHA24Accident · Minor injuriesClosedSchleicher ASW-19 · Franklin Forks, PANTSB NYC80DA081Accident · No injuriesClosedCessna 150 · Princetown, NJNTSB ANC80FA061Accident · Serious injuriesClosedPiper PA-32R · Fairbanks, AKNTSB FTW80DRD46Accident · No injuriesClosedCessna 180 · Dulac, LANTSB ATL80FA070Accident · 1 fatalClosedAero Comdr 680V · Jackson, MSNTSB MIA80FLD80Accident · Serious injuriesClosedCessna 182K · Tampa, FLNTSB LAX80FA117Accident · 2 fatalClosedCessna TU206G · Carlsbad, CANTSB FTW80FRD44Accident · Minor injuriesClosedSpezio Tu Holer · Hammond, LANTSB FTW80FQG28Accident · No injuriesClosedCessna 180 · Borger, TXNTSB CHI80FEG18Accident · 2 fatalClosedRand KR-2 · Lebanon, OHNTSB ATL80FID24Accident · Serious injuriesClosedBellanca 17-30A · Tappahannock, VANTSB LAX80FA116Accident · 4 fatalClosedGrum-Amer AA-5 · San Diego, CANTSB LAX80DVA51Accident · Minor injuriesClosedCessna 210 · Bakersfield, CANTSB CHI80DEM34Accident · No injuriesClosedSchweizer 2-33A · Frankfort, MINTSB NYC80DHD19Accident · No injuriesClosedPiper PA-12 · Rehoboth, DENTSB ANC80DAA17Accident · No injuriesClosedPiper PA-18 · Old Minto, AKNTSB FTW80FRJ28Accident · Serious injuriesClosedPiper PA-32 · Cottonport, LANTSB DEN80FTM29Accident · No injuriesClosedPiper PA-38 · Provo, UTNTSB CHI80FEP39Accident · No injuriesClosedCessna 182K · Wilmot, WINTSB ATL80DKJ16Accident · No injuriesClosedCessna 172 · Butler, ALNTSB NYC80FA049Accident · 2 fatalClosedCessna 210H · Lyndonville, VTNTSB SEA80FYE39Accident · 1 fatalClosedVarieze 1 · Arlington, WANTSB NYC80FNC30Accident · No injuriesClosedBellanca 7GCAA · Biddeford, MENTSB CHI80FEI28Accident · Minor injuriesClosedCessna 172D · Minerva, OHNTSB LAX80FVM34Accident · No injuriesClosedPiper PA-28 · Monterey, CANTSB ATL80FKJ15Accident · No injuriesClosedErco 415-C · Cullman, ALNTSB MIA80FA077Accident · 4 fatalClosedBeech 65 · Ft.Pierce, FLNTSB NYC80DHA22Accident · No injuriesClosedCessna 172 · Pittstown, NJNTSB MIA80FA076Accident · 1 fatalClosedAeronca 7AC · Miami, FLNTSB SEA80FYK10Accident · Serious injuriesClosedPrue Super STD · Brothers, ORNTSB LAX80FUJ76Accident · No injuriesClosedCessna 172 · Prescott, AZNTSB NYC80FHA19Accident · Serious injuriesClosedMitchell U-2 · Doylestown, PANTSB MKC80FCA19Accident · No injuriesClosedPiper PA-28 · Jefferson City, MONTSB MKC80FA041Accident · Serious injuriesClosedBeech 95-C55 · Chesterfield, MONTSB CHI80FEM29Accident · 1 fatalClosedScorpion II · Hastings, MINTSB NYC80FHA18Accident · 2 fatalClosedThorp T-18 · Quakertown, PANTSB NYC80DHM16Accident · No injuriesClosedSchweizer SGS126 · Colts Neck, NJ