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 UNK78X0134Accident · 10 fatalClosedPiper PA-31 · Las Vegas, NVNTSB MKC78FCA48Accident · Serious injuriesClosedCessna 182 · Cape Girardeau, MONTSB LAX78FVM45Accident · No injuriesClosedPiper PA-24 · Shandon, CANTSB CHI78FEP64Accident · 2 fatalClosedGrumman AA-1C · Laona, WINTSB MKC78FER97Accident · No injuriesClosedCessna 175A · White Bear Lk, MNNTSB LAX78FA071Accident · 4 fatalClosedPiper PA-32 · Laverne, CANTSB MKC78DCD48Accident · Minor injuriesClosedTaylorcraft A · Blakesburg, IANTSB OAK78DXQ42Accident · Serious injuriesClosedLuscombe 8E · Jackpot, NVNTSB NYC78FHM26Accident · Serious injuriesClosedPiper PA-32 · Matawan, NJNTSB LAX78FUJ96Accident · No injuriesClosedPiper PA-28 · Flagstaff, AZNTSB SEA78FTA19Accident · No injuriesClosedCessna 170B · Broadus, MTNTSB MIA78DLG36Accident · No injuriesClosedBell 47D1 · Summerville, SCNTSB IAD78FLJ23Accident · Serious injuriesClosedAeronca 7AC · Fayetteville, NCNTSB DEN78FQD33Accident · No injuriesClosedPiper PA-32R · Timberon, NMNTSB ANC78DAH13Accident · No injuriesClosedPiper PA-18 · Iliamna, AKNTSB MIA78FKQ34Accident · No injuriesClosedCessna 188 · Brookhaven, MSNTSB CHI78FEV51Accident · No injuriesClosedGrumman G-164 · Greenfield, ILNTSB IAD78FLJ21Accident · Serious injuriesClosedBeech K35 · Morrisville, NCNTSB IAD78FLT10Accident · Serious injuriesClosedRockwell 680F · Memphis, TNNTSB IAD78FID22Accident · Minor injuriesClosedPiper PA-22 · Danville, VANTSB FTW78DRD52Accident · Minor injuriesClosedCessna 180F · Buras, LANTSB MIA78FKG73Accident · Serious injuriesClosedBellanca 7GCBC · Monroe, GANTSB LAX78DUJ93Accident · No injuriesClosedBeech J35 · Chinle, AZNTSB CHI78FEP59Accident · Minor injuriesClosedCessna 182 · Bristol, WINTSB SEA78FA058Accident · 2 fatalClosedBeech C35 · Redmond, ORNTSB NYC78FNA46Accident · No injuriesClosedCessna 170 · Block Island, RINTSB MIA78FKJ78Accident · No injuriesClosedBellanca 300 · Pensacola, FLNTSB MIA78DKJ79Accident · Serious injuriesClosedVolksplane II · Jasper, ALNTSB CHI78DEP54Accident · Minor injuriesClosedBeech F35 · Wautoma, WINTSB NYC78FA083Accident · Minor injuriesClosedPiper PA-28 · Sussex, NJNTSB ANC78DAA36Accident · Minor injuriesClosedPiper PA-25 · Tanana, AKNTSB CHI78FEM35Accident · Minor injuriesClosedTaylorcraft BL-65 · Grand Haven, MINTSB ANC78DAH67Accident · No injuriesClosedCessna 150 · Tyonek, AKNTSB MIA78FLG34Accident · No injuriesClosedBell 47G · Murrels Inlet, SCNTSB MIA78FKG53Accident · No injuriesClosedCessna 188B · Cordele, GANTSB FTW78FA069Accident · 2 fatalClosedAeronca 7AC · Haslet, TXNTSB DEN78FTC36Accident · No injuriesClosedCessna 185F · Cheyenne, WYNTSB MKC78DCJ40Accident · No injuriesClosedPiper PA-25 · Arnold, NENTSB CHI78FEX31Accident · 1 fatalClosedCessna 172 · Evansville, INNTSB FTW78FA067Accident · 2 fatalClosedCessna 150K · De Queen, ARNTSB FTW78FA066Accident · 1 fatalClosedBolkow BO-105 · Cameron, LANTSB CHI78FEP47Accident · 1 fatalClosedChampion 7ECA · Howard, WINTSB MKC78FA063Accident · 3 fatalClosedCessna 177 · Plainville, KSNTSB ANC78DAH02Accident · Minor injuriesClosedCessna 185 · Cordova, AKNTSB SEA78FYP47Accident · Serious injuriesClosedBellanca 7GCBC · Nez Perce, IDNTSB SEA78FYA21Accident · 1 fatalClosedAir Tractor AT-300 · Idaho Falls, IDNTSB OAK78FVA72Accident · No injuriesClosedGrumman G-164A · Selma, CANTSB FTW78FRG65Accident · No injuriesClosedCessna 182H · Weslaco, TXNTSB IAD78FA090Accident · 1 fatalClosedPiper PA-22 · Westminister, MDNTSB CHI78FEV47Accident · No injuriesClosedGreat Lakes 2T1A2 · Peoria, IL