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 ANC76AA067Accident · No injuriesClosedBell 206B · Augustine Isld, AKNTSB NYC76FNA28Accident · Serious injuriesClosedPiper PA-28 · Norfolk, MANTSB LAX76FUJ53Accident · Serious injuriesClosedPiper PA-22 · Phoenix, AZNTSB LAX76FVM22Accident · Serious injuriesClosedPiper PA-28R · Sn Luis Obspo, CANTSB FTW76FQG52Accident · No injuriesClosedCessna 310J · Lubbock, TXNTSB MKC76DCQ29Accident · No injuriesClosedCessna 150 · Colby, KSNTSB MIA76FLA31Accident · No injuriesClosedCessna 177RG · Jacksonville, FLNTSB FTW76FPD27Accident · Minor injuriesClosedCessna 421 · Iowa Park, TXNTSB LAX76AL048Accident · 1 fatalClosedCessna 150E · Holbrook, AZNTSB FTW76DQG50Accident · Serious injuriesClosedDavis DA-5 · Stanton, TXNTSB SEA76FYC27Accident · No injuriesClosedLuscombe 8A · Albany, ORNTSB IAD76FKM25Accident · Serious injuriesClosedPiper PA-28R · Banner Elk, NCNTSB SEA76FYE24Accident · Serious injuriesClosedBede BD-5B · Arlington, WANTSB CHI76FEC21Accident · No injuriesClosedCessna 172 · Pinckney, MINTSB NYC76FNA27Accident · No injuriesClosedPiper PA-23 · Bedford, MANTSB NYC76FHJ12Accident · No injuriesClosedBeech B55 · Amityville, NYNTSB ANC76DAG84Accident · No injuriesClosedChampion 7GCB · New Stuyahok, AKNTSB FTW76FRG37Accident · No injuriesClosedPiper PA-22 · Corpus Christi, TXNTSB SEA76FYE23Accident · Serious injuriesClosedPiper PA-22 · Vashon, WANTSB IAD76DKM27Accident · No injuriesClosedPiper PA-22 · Whitsett, NCNTSB MIA76FLD38Accident · No injuriesClosedSiai-Marche S.205 · Venice, FLNTSB DEN76FTC23Accident · No injuriesClosedErco 415-D · Douglas, WYNTSB MIA76DKT43Accident · Serious injuriesClosedCessna 182K · Stuart, FLNTSB MIA76FLA28Accident · No injuriesClosedPiper PA-22 · Hilliard, FLNTSB MKC76FCJ21Accident · Minor injuriesClosedMooney M20F · Alliance, NENTSB DEN76DTM13Accident · No injuriesClosedCessna 140 · Price, UTNTSB CHI76FEM23Accident · Minor injuriesClosedPiper PA-28 · Eaton Rapids, MINTSB IAD76FLJ17Accident · Minor injuriesClosedCessna 210 · Core Banks, NCNTSB CHI76FEE54Accident · No injuriesClosedPiper PA-23 · Crestwood, ILNTSB ANC76DAG75Accident · Minor injuriesClosedPiper PA-18 · Anchorage, AKNTSB MIA76FKJ41Accident · Minor injuriesClosedMooney M20E · Alabaster, ALNTSB SEA76DYI13Accident · No injuriesClosedPiper J-3 · Medford, ORNTSB FTW76AF054Accident · 2 fatalClosedCessna 182E · Mountain Home, TXNTSB NYC76DNC34Accident · No injuriesClosedCessna 150 · Nashua, NHNTSB DEN76AD026Accident · 4 fatalClosedAero Comdr 680 · Pagosa Spgs, CONTSB LAX76DUJ50Accident · Minor injuriesClosedCessna 206 · Holbrook, AZNTSB ANC76AA056Accident · 2 fatalClosedBellanca 7GCAA · Soldotna, AKNTSB CHI76FET24Accident · Serious injuriesClosedCessna 210B · Fort Wayne, INNTSB NYC76AN059Accident · Serious injuriesClosedBeech C55 · Doylestown, PANTSB ANC76DAG28Accident · Minor injuriesClosedAeronca 11AC · Telida, AKNTSB MIA76FLD34Accident · No injuriesClosedPiper PA-34 · St Petersburg, FLNTSB LAX76FUM16Accident · No injuriesClosedHiller Acft UH-12B · San Diego, CANTSB NYC76AN055Accident · 1 fatalClosedPiper PA-28R · Erie, PANTSB FTW76FPJ19Accident · No injuriesClosedHiller Acft UH-12A · Ada, OKNTSB ANC76AA051Accident · Minor injuriesClosedCessna 180 · Akiachak, AKNTSB OAK76FJA08Accident · No injuriesClosedMurrayair MA-1 · Hilo, HINTSB CHI76DER06Accident · No injuriesClosedAero Comdr 100 · Superior, WINTSB OAK76DJA07Accident · No injuriesClosedMurrayair MA-1 · Hilo, HINTSB OAK76DVD17Accident · Minor injuriesClosedCessna 182 · Oakland, CANTSB MKC76FCD22Accident · No injuriesClosedCessna 140 · Des Moines, IA