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 MKC75DCG44Accident · No injuriesClosedPiper PA-28 · Garden City, MONTSB MIA75FLA42Accident · Minor injuriesClosedPiper PA-22 · Chipley, FLNTSB IAD75AI058Accident · 1 fatalClosedBeech E18S · Salisbury, MDNTSB SEA7KFYC37Accident · No injuriesClosedPiper PA-25 · Kent, ORNTSB FTW75FRD54Accident · No injuriesClosedGrumman G-164A · Eunice, LANTSB FTW75FPD40Accident · No injuriesClosedBeech A23A · Fort Worth, TXNTSB OAK75DVG65Accident · No injuriesClosedCessna 150 · Yuba City, CANTSB MKC75DCQ48Accident · No injuriesClosedCessna 188 · Selden, KSNTSB ANC75DAG90Accident · No injuriesClosedPiper PA-18 · Anchorage, AKNTSB ANC75AA082Accident · 6 fatalClosedPiper PA-23 · Savoonga, AKNTSB LAX75FUD06Accident · Minor injuriesClosedCessna 150 · Hawthorne, CANTSB LAX75AL061Accident · 6 fatalClosedLockheed 1049H · Mesa, AZNTSB FTW75FRD50Accident · No injuriesClosedSnow 600S2R · Oakdale, LANTSB FTW75FPG52Accident · Serious injuriesClosedCessna 150L · Greenwood, ARNTSB DEN75DTM14Accident · Minor injuriesClosedCessna 175 · Lynn, UTNTSB IAD75FID20Accident · Serious injuriesClosedPiper PA-12 · Newport News, VANTSB FTW75FRD46Accident · Minor injuriesClosedPiper PA-25 · Leroy, LANTSB OAK75DVG60Accident · No injuriesClosedGrumman G-164A · Davis, CANTSB FTW75DPG54Accident · No injuriesClosedGrumman G-164A · Beedeville, ARNTSB SEA75DYE42Accident · No injuriesClosedPiper PA-30 · Ocean Shores, WANTSB OAK75FVG59Accident · Minor injuriesClosedGrumman G-164 · Grimes, CANTSB SEA75DYG38Accident · No injuriesClosedBeech A35 · Spokane, WANTSB MKC75FCQ43Accident · Serious injuriesClosedBeech 95-B55 · Beaumont, KSNTSB LAX75FUQ28Accident · No injuriesClosedCessna 150 · Van Nuys, CANTSB FTW75FRD44Accident · Minor injuriesClosedPiper PA-22 · Mamou, LANTSB FTW75FPD39Accident · Serious injuriesClosedPiper PA-28 · Ft Worth, TXNTSB CHI75FEP52Accident · Serious injuriesClosedWeber W8 · Shullsburg, WINTSB CHI75DET18Accident · No injuriesClosedCessna 177 · Angola, INNTSB FTW75FRG77Accident · No injuriesClosedCessna 320D · Harlingen, TXNTSB FTW75FPJ22Accident · No injuriesClosedCessna 172 · Ada, OKNTSB DEN75DTC21Accident · No injuriesClosedPiper PA-18 · Cassa, WYNTSB SEA75FYE40Accident · No injuriesClosedAmer Avco AA1A · Stuart Island, WANTSB FTW75FPG49Accident · Minor injuriesClosedAero Comdr 500A · Springdale, ARNTSB MIA75FKJ59Accident · Minor injuriesClosedPiper PA-36 · Dothan, ALNTSB SEA7KFYA37Accident · No injuriesClosedBeech B24R · Carey, IDNTSB CHI75FEP51Accident · No injuriesClosedPiper PA-25 · Monroe, WINTSB OAK75DVM28Accident · Minor injuriesClosedCessna 305A · Fort Ord, CANTSB ANC75AA076Accident · No injuriesClosedBeech E18S · Montague Is, AKNTSB MIA75AM016Accident · 6 fatalClosedBeech A100 · Hilton Head Is, SCNTSB IAD75FLQ21Accident · No injuriesClosedPiper PA-25 · Skylight, KYNTSB CHI75FEG18Accident · Serious injuriesClosedCessna 182A · Waynesville, OHNTSB MIA75FLD69Accident · No injuriesClosedBede BD-4 · Kissimmee, FLNTSB FTW75FRD42Accident · No injuriesClosedGrumman G-164A · Reeves, LANTSB FTW75FRA24Accident · No injuriesClosedBoeing B75N1 · Anahuac, TXNTSB IAD75FLQ20Accident · Serious injuriesClosedVolksplane VP-1 · Utica, KYNTSB FTW75FPM16Accident · No injuriesClosedWillie II · Tulsa, OKNTSB IAD75FIG17Accident · Minor injuriesClosedCessna 180 · Laurel, MDNTSB FTW75FPG47Accident · Minor injuriesClosedPiper PA-28 · N.Little Rock, ARNTSB FTW75FPA24Accident · Minor injuriesClosedCessna 310F · Dallas, TXNTSB IAD75DKM25Accident · No injuriesClosedCessna 150G · Wadesboro, NC