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 NYC81FHA20Accident · Minor injuriesClosedCessna 210A · Doylestown, PANTSB NYC81DNA22Accident · No injuriesClosedPiper PA-22 · Mansfield, MANTSB MKC81FA045Accident · 1 fatalClosedPietenpol A'CAMP · Emma, MONTSB LAX81FVD35Accident · Minor injuriesClosedJeanie-Teen 02 · Tracy, CANTSB CHI81FER54Accident · No injuriesClosedCessna A185E · Superior, WINTSB ATL81FKQ22Accident · No injuriesClosedPiper PA-12 · Ocean Springs, MSNTSB NYC81FGM24Accident · Serious injuriesClosedCessna 182J · Butler, PANTSB LAX81FA110Accident · 2 fatalClosedBellanca 8KCAB · San Carlos, CANTSB FTW81FPJ33Accident · Minor injuriesClosedCessna 421B · Yukon, OKNTSB DEN81FTC21Accident · Serious injuriesClosedPiper PA-28 · Rawlins, WYNTSB ATL81FLJ14Accident · Minor injuriesClosedCessna 172N · Roxboro, NCNTSB LAX81FA109Accident · 1 fatalClosedCessna 150J · Yuma, AZNTSB FTW81FQA38Accident · No injuriesClosedBeech B23 · Taos, NMNTSB FTW81FQA37Accident · No injuriesClosedCessna 140 · Albuquerque, NMNTSB FTW81FA126Accident · 2 fatalClosedMooney M20F · Muleshoe, TXNTSB FTW81FA124Accident · 2 fatalClosedCessna 401 · Albuquerque, NMNTSB ATL81FA099Accident · 2 fatalClosedAeronca 7AC · Rogersville, TNNTSB FTW81DRJ22Accident · No injuriesClosedVari-Eze 01 · Natchitoches, LANTSB FTW81DPG55Accident · Minor injuriesClosedGrumman G-164B · Bono, ARNTSB MIA81FA097Accident · Serious injuriesClosedBrittnorman BN-2A · San Juan, PRNTSB LAX81FVD32Accident · Serious injuriesClosedCessna 172 · Santa Rosa, CANTSB NYC81FHA19Accident · Minor injuriesClosedCessna 170 · Uniondale, PANTSB MKC81FCD26Accident · No injuriesClosedCassutt 3M · Mason City, IANTSB LAX81FVD34Accident · Serious injuriesClosedCessna 150 · Honeydew, CANTSB LAX81DUJ76Accident · No injuriesClosedAyres S2R · Gila Bend, AZNTSB CHI81FEK24Accident · No injuriesClosedBeech B35 · Columbus, OHNTSB MKC81DCA18Accident · No injuriesClosedCessna 182P · Kahoka, MONTSB FTW81FPD31Accident · No injuriesClosedHiller Acft UH-12C · Burleson, TXNTSB NYC81DHA17Accident · Minor injuriesClosedAeronca 7AC · Springfield, PANTSB FTW81DPG52Accident · No injuriesClosedCessna 188 · Gould, ARNTSB NYC81FNA18Accident · 1 fatalClosedRand KR-2 · N Kingstown, RINTSB DEN81DTI13Accident · No injuriesClosedCessna 172 · Schafers Mdws, MTNTSB CHI81FA068Accident · Minor injuriesClosedBellanca 7GCBC · Moline, ILNTSB SEA81DYK10Accident · No injuriesClosedCessna T210M · Sunriver, ORNTSB DEN81FTC20Accident · Minor injuriesClosedPiper PA-28 · Sundance, WYNTSB NYC81FHD30Accident · Serious injuriesClosedPiper PA-18 · Atlantic City, NJNTSB NYC81FNE22Accident · No injuriesClosedPiper PA-28R · N.Egremont, MANTSB NYC81FHM10Accident · Serious injuriesClosedCessna 2101 · Spring Valley, NYNTSB NYC81FNA21Accident · Minor injuriesClosedGulf Amer AA-5B · Stow, MANTSB NYC81FGT07Accident · Minor injuriesClosedCessna 150 · Columbia, PANTSB MIA81FKT84Accident · No injuriesClosedCessna 172 · Clewiston, FLNTSB CHI822A073Incident · No injuriesClosedSwearingen SA-226 · Detroit, MINTSB CHI81FEX25Accident · Serious injuriesClosedN American AT-6G · Indianapolis, INNTSB NYC81FA072Accident · 2 fatalClosedChampion 7ECA · West Middlesex, PANTSB MIA81IA092Incident · No injuriesClosedDehavilland DH-114 · San Juan, PRNTSB CHI81FER50Accident · No injuriesClosedPiper J4A · Elgin, MNNTSB LAX81FVG50Accident · No injuriesClosedCessna 150 · Georgetown, CANTSB DEN81FTE54Accident · No injuriesClosedPiper PA-31 · Walsenburg, CONTSB MIA81DKJ12Accident · No injuriesClosedCessna 172M · Marianna, FLNTSB CHI81FEP30Accident · Minor injuriesClosedCessna 172I · Oconomowoc, WI