NTSB investigations
20,559 cases where the phase of flight was Initial climb.
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 = 350)
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 = 350)
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 IAD79FID02Accident · Minor injuriesClosedBeech D45 · Norfolk, VANTSB NYC79FA007Accident · 2 fatalClosedCessna 172 · Marcy, NYNTSB OAK79DVA08Accident · No injuriesClosedRockwell S2R · Firebaugh, CANTSB OAK79DJA03Accident · No injuriesClosedMurrayair MA1B · Honokaa, HINTSB ANC79FA010Accident · No injuriesClosedCessna 207A · Napaskiak, AKNTSB SEA79DYP01Accident · Minor injuriesClosedCessna 172 · Elk City, IDNTSB MIA79FA004Accident · 1 fatalClosedGreat Lakes 2T-1A2 · Guntersville, ALNTSB IAD79DLQ02Accident · Minor injuriesClosedGlobe GC-1B · Pikeville, KYNTSB NYC79FA005Accident · 1 fatalClosedPiper PA-28 · Great Bend, PANTSB SEA79DYK02Accident · Minor injuriesClosedCessna 182P · Silver Lake, ORNTSB LAX79FUJ05Accident · Minor injuriesClosedCessna T337B · Marana, AZNTSB MKC79FCG08Accident · Serious injuriesClosedPiper PA-22 · Ozark, MONTSB CHI79FEC01Accident · 2 fatalClosedNord Stampe SV4C · Wixom, MINTSB SEA79FA004Accident · No injuriesClosedPiper PA-32 · Mc Call, IDNTSB LAX79FA005Accident · 3 fatalClosedBeech 35 · Williams, AZNTSB IAD79FIJ01Accident · Serious injuriesClosedMooney M20C · Grundy, VANTSB ANC79DAG15Accident · No injuriesClosedCessna 185 · Iliamna, AKNTSB MKC79DER11Accident · No injuriesClosedRyan PT-22 · Webster, MNNTSB OAK79FVG02Accident · 2 fatalClosedNord Stampe SV4C · Shingle Spgs, CANTSB FTW79FPG05Accident · No injuriesClosedBeech J35 · Newport, ARNTSB FTW79FA004Accident · 2 fatalClosedCessna 172K · New Orleans, LANTSB FTW79DPD03Accident · No injuriesClosedHarmon 1 · Gainesville, TXNTSB MKC79FCG07Accident · No injuriesClosedBellanca 7KCAB · Excelsior Spgs, MONTSB LAX79FA003Accident · 2 fatalClosedRockwell 112A · Yucca Valley, CANTSB OAK79FA002Accident · 2 fatalClosedBellanca 8KCAB · Palo Alto, CANTSB MIA79FKG05Accident · No injuriesClosedCessna 140 · Sugar Valley, GANTSB FTW79FRG02Accident · No injuriesClosedBeech E18S · Laredo, TXNTSB SEA79DYA01Accident · No injuriesClosedBellanca 7GCBC · Hailey, IDNTSB OAK79FVD02Accident · No injuriesClosedPiper PA-24 · Santa Rosa, CANTSB MIA79FLG01Accident · No injuriesClosedCessna 182P · Hilton Head, SCNTSB CHI79DEE13Accident · No injuriesClosedCessna 150 · Lanark, ILNTSB NYC79FGM04Accident · No injuriesClosedPiper PA-22 · Franklin, PANTSB SEA79DYK01Accident · Serious injuriesClosedPiper PA-28 · Sun River, ORNTSB NYC79DNC04Accident · No injuriesClosedBirdman TL-1A · Hudson, NHNTSB MIA79DKT06Accident · Minor injuriesClosedCessna 150 · Labelle, FLNTSB FTW79DPA01Accident · No injuriesClosedBreezy I · Sulphur Spgs, TXNTSB ANC79DAA01Accident · No injuriesClosedPiper PA-18 · Fairbanks, AKNTSB SEA79FA001Accident · 2 fatalClosedCessna 150H · Omak, WANTSB OAK79FVG01Accident · Minor injuriesClosedPiper PA-24 · Davis, CANTSB MIA79FKT01Accident · No injuriesClosedCessna 210-5A · Miami, FLNTSB DEN79FA002Accident · 2 fatalClosedGrum Amer AA5 · Littleton, CONTSB CHI79FEE02Accident · Minor injuriesClosedBeechcraft C24R · Sugar Grove, ILNTSB MIA79FKG01Accident · Serious injuriesClosedGlobe Swift GC-1B · Hampton, GANTSB MKC79FCG01Accident · Serious injuriesClosedCessna 150M · Milo, MONTSB LAX79FA001Accident · 1 fatalClosedNavion A · Buena Park, CANTSB CHI78FEE70Accident · Minor injuriesClosedBeech 95-B55 · Elgin, ILNTSB MIA78FKQ42Accident · No injuriesClosedCessna A188B · Leland, MSNTSB MKC78FER95Accident · Minor injuriesClosedCessna 172K · Grygla, MNNTSB CHI78FEC56Accident · Minor injuriesClosedCessna 150L · Pontiac, MINTSB MIA79DKT10Accident · No injuriesClosedEnstrom F28A · Stuart, FL