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 FTW78FRA12Accident · Serious injuriesClosedNavion B · Huntsville, TXNTSB CHI78FEK10Accident · No injuriesClosedCessna 172G · Plain City, OHNTSB CHI78FEP23Accident · No injuriesClosedGrumman AA1-B · Waukesha, WINTSB SEA78DYM18Accident · Minor injuriesClosedCessna 172 · Brooks, ORNTSB IAD78FID06Accident · No injuriesClosedCessna 150 · Norfolk, VANTSB IAD78FA046Accident · Serious injuriesClosedBeech B18G · Rockingham, NCNTSB ANC78DAG28Accident · No injuriesClosedCessna 170 · Kenai, AKNTSB OAK78FJY01Accident · 2 fatalClosedCessna 337F · Agana, GUNTSB CHI78FEM11Accident · No injuriesClosedCessna 140 · Atwood, MINTSB SEA78FYP12Accident · Serious injuriesClosedCessna 150L · Electric City, WANTSB NYC78FNE10Accident · Minor injuriesClosedElci JD2FF · Waterford, CTNTSB MKC78DER30Accident · No injuriesClosedBeech 35 · Rochester, MNNTSB MIA78DKQ04Accident · No injuriesClosedCessna 188 · Calhoun City, MSNTSB NYC78FHA17Accident · No injuriesClosedPiper PA-32 · Easton, PANTSB DEN78FA025Accident · 2 fatalClosedBeech 35 · Ogden, UTNTSB NYC78FFA16Accident · No injuriesClosedCessna 150 · Johnstown, NYNTSB CHI78FEC20Accident · Minor injuriesClosedPiper PA-24 · Utica, MINTSB FTW78FQD12Accident · Minor injuriesClosedGrum Amer AA1-C · El Paso, TXNTSB CHI78FA023Accident · 1 fatalClosedTaylorcraft BC12D · Lowell, MINTSB ANC78FA019Accident · Minor injuriesClosedPiper PA-23 · Fairbanks, AKNTSB FTW78FPM04Accident · No injuriesClosedCessna 177RG · Tulsa, OKNTSB CHI78FEI11Accident · No injuriesClosedCessna 172M · Youngstown, OHNTSB MKC78FER28Accident · No injuriesClosedCessna 180 · Rice, MNNTSB DCA78AA007Accident · 17 fatalClosedBeech 99 · Richland, WANTSB OAK78FVD17Accident · No injuriesClosedCessna 210D · Hayward, CANTSB OAK78DXQ11Accident · Serious injuriesClosedPiper PA-28 · Mammoth Lakes, CANTSB IAD78FIA03Accident · Minor injuriesClosedCessna 182N · Friendly, MDNTSB DEN78FTE27Accident · No injuriesClosedPiper PA-23 · Boulder, CONTSB LAX78DVA21Accident · No injuriesClosedGrumman G164-B · Wasco, CANTSB ANC78DAG22Accident · No injuriesClosedCessna 170B · Soldotna, AKNTSB NYC78FNA14Accident · No injuriesClosedPiper J3 · Haverhill, MANTSB MIA78FLD21Accident · 1 fatalClosedHolt PDQ2 · Arcadia, FLNTSB FTW78DPG14Accident · Minor injuriesClosedBellanca 7ECA · Mountain View, ARNTSB CHI78FEP13Accident · No injuriesClosedPiper PA-32 · Watertown, WINTSB ANC78FA016Accident · 3 fatalClosedCessna 170-A · Anchorage, AKNTSB LAX78FUG15Accident · Minor injuriesClosedCallair A-2 · Lucerne Valley, CANTSB LAX78DVM08Accident · Minor injuriesClosedPiper PA-36 · Shandon, CANTSB NYC78FA023Accident · 2 fatalClosedAerostar 601P · Dubois, PANTSB OAK78DXQ09Accident · Minor injuriesClosedCessna 182 · Mammoth Lakes, CANTSB MKC78FER23Accident · No injuriesClosedBeech G35 · Litchfield, MNNTSB IAD78FA035Accident · Serious injuriesClosedPiper PA-32R · Laurel, MDNTSB DEN78DQA10Accident · Minor injuriesClosedCessna 185F · Las Vegas, NMNTSB CHI78FEE19Accident · No injuriesClosedPiper PA-23 · Bolingbrook, ILNTSB FTW78FRG21Accident · No injuriesClosedPiper PA-28R · Corpus Christi, TXNTSB DEN78FA020Accident · 3 fatalClosedDehavilland DHC-6 · Pueblo, CONTSB FTW78DPG13Accident · No injuriesClosedCessna 182P · Waldron, ARNTSB ANC78FAA06Accident · No injuriesClosedBellanca 7GCBC · Fairbanks, AKNTSB FTW78FPA12Accident · No injuriesClosedCessna 172N · Dallas, TXNTSB ANC78FAA04Accident · Serious injuriesClosedPiper PA-18 · Lk Minchumina, AKNTSB OAK78FVA20Accident · No injuriesClosedCessna 182P · Clovis, CA