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 SEA69D0128Accident · No injuriesClosedPiper PA-28 · Spanaway, WANTSB MKC69F0276Accident · Serious injuriesClosedMooney M20C · Kenmare, NDNTSB OAK69D0137Accident · Minor injuriesClosedCessna 170B · Tahoe Valley, CANTSB CHI69A0034Accident · 6 fatalClosedBeech 95-B55 · Frankenmuth, MINTSB ANC69D0053Accident · No injuriesClosedPiper PA-12 · Soldotna, AKNTSB DEN69A0014Accident · 5 fatalClosedCessna 210 · Fort Morgan, CONTSB SEA69D0156Accident · No injuriesClosedMooney M18C · Portland, ORNTSB LAX69F0150Accident · Serious injuriesClosedCessna 150H · Pacoima, CANTSB FTW69F0239Accident · Minor injuriesClosedPiper PA-22 · Roe, ARNTSB DEN69F0117Accident · Serious injuriesClosedPiper PA-28 · Grnd Jnction, CONTSB DEN69F0114Accident · No injuriesClosedPiper PA-32 · Littleton, CONTSB NYC69D0163Accident · No injuriesClosedCessna 210 · Basking Ridge, NJNTSB MIA69D0176Accident · No injuriesClosedPiper PA-23 · Opa Locka, FLNTSB CHI69F0327Accident · Minor injuriesClosedPiper PA-28 · Dowagiac, MINTSB SEA69D0114Accident · No injuriesClosedSchleicher KA6CR · Dallesport, WANTSB NYC69A0033Accident · 2 fatalClosedPiper PA-28 · Buffalo, NYNTSB MKC69D0189Accident · No injuriesClosedCessna 172 · Spring City, MONTSB NYC69F0194Accident · No injuriesClosedBensen B8M · Shelburne, VTNTSB NYC69F0180Accident · 1 fatalClosedBensen B8M · Bridgeton, NJNTSB LAX69A0014Accident · 2 fatalClosedAero Comdr 1121A · N Hollywood, CANTSB CHI69D0348Accident · Minor injuriesClosedLuscombe 8F · Walbridge, OHNTSB CHI69D0274Accident · No injuriesClosedCessna 170 · Plainfield, ILNTSB NYC69D0155Accident · Minor injuriesClosedSchweizer SGU222 · Hershey, PANTSB NYC69A0030Accident · 2 fatalClosedCessna 402 · Flushing, NYNTSB FTW69F0203Accident · Minor injuriesClosedCessna 150 · Little Rock, ARNTSB DEN69D0115Accident · Serious injuriesClosedPiper PA-28 · Rangely, CONTSB NYC69F0212Accident · Serious injuriesClosedCessna 150H · Monroeville, PANTSB NYC69D0167Accident · Minor injuriesClosedAeronca O-58B · N.New Portland, MENTSB FTW69F0184Accident · No injuriesClosedAeronca 65-TAF · Fort Worth, TXNTSB CHI69F0200Accident · No injuriesClosedPiper PA-28 · Cincinnati, OHNTSB NYC69A0027Accident · 2 fatalClosedPiper PA-28 · Manahawkin, NJNTSB MIA69F0183Accident · Minor injuriesClosedPiper PA-28 · West Columbia, SCNTSB DIA69A0011Accident · 1 fatalClosedPiper PA-12 · Monroe, NCNTSB SEA69F0084Accident · No injuriesClosedBeech K35 · Boise, IDNTSB NYC69D0181Accident · Minor injuriesClosedCulver LFA · Perry, NYNTSB CHI69F0262Accident · Serious injuriesClosedPiper PA-28 · Burgin, KYNTSB ANC69D0036Accident · Serious injuriesClosedPiper PA-20 · Dillingham, AKNTSB NYC69F0165Accident · Serious injuriesClosedBeech 23 · Danbury, CTNTSB NYC69F0135Accident · No injuriesClosedCessna 170 · Turner, MENTSB MIA69F0116Accident · No injuriesClosedPiper PA-28 · St Cloud, FLNTSB DIA69F0061Accident · No injuriesClosedMooney M20C · Mitchellville, MDNTSB CHI69F0222Accident · Serious injuriesClosedGlider HP-13A · Vandalia, ILNTSB CHI69D0219Accident · No injuriesClosedCessna 172 · Newaygo, MINTSB OAK69D0138Accident · No injuriesClosedCessna 182 · Santa Rosa, CANTSB NYC69F0149Accident · Serious injuriesClosedCessna 150 · New City, NYNTSB NYC69D0136Accident · No injuriesClosedTaylorcraft BC12-D · Norway, MENTSB FTW69F0134Accident · Minor injuriesClosedCessna 150 · Abilene, TXNTSB NYC69F0170Accident · Minor injuriesClosedFournier RF4D · Sharon, PANTSB MKC69F0171Accident · No injuriesClosedMooney M20G · Oxford, NENTSB MIA69F0319Accident · Minor injuriesClosedPiper PA-28 · Blackville, SC