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 CHI80FEX07Accident · Serious injuriesClosedCessna A188B · Madison, INNTSB CHI80FEV20Accident · No injuriesClosedCessna 182RG · Jerseyville, ILNTSB LAX80FUG27Accident · Serious injuriesClosedErco 415-C · Landers, CANTSB MIA80FKQ04Accident · No injuriesClosedCessna 140 · Drew, MSNTSB NYC80FNE13Accident · Serious injuriesClosedTemco GC-1B · Hartford, CTNTSB FTW80FRD20Accident · Serious injuriesClosedCessna 182L · New Orleans, LANTSB FTW80FPM08Accident · No injuriesClosedPiper J-3 · Bristow, OKNTSB FTW80AA057Accident · 7 fatalClosedPiper PA-31 · Houston, TXNTSB SEA80DYM23Accident · Serious injuriesClosedPiper PA-25 · Antelope, ORNTSB LAX80FA067Accident · 1 fatalClosedBeech A36TC · San Diego, CANTSB LAX80DUG26Accident · No injuriesClosedPiper PA-28 · Bermuda Dunes, CANTSB MIA80FLA17Accident · No injuriesClosedAero Comdr 680F · N Smyrna Beach, FLNTSB DEN80FTE33Accident · Serious injuriesClosedAeronca 7BCM · Rush, CONTSB SEA80FYP14Accident · Serious injuriesClosedCessna A188B · Sprague, WANTSB CHI80FEV17Accident · Serious injuriesClosedCessna 182M · Peoria, ILNTSB ANC80DAG37Accident · Minor injuriesClosedPiper PA-18 · Tonsina Lodge, AKNTSB DEN80FTE34Accident · Minor injuriesClosedBellanca 7ECA · Littleton, CONTSB CHI80FA028Accident · 3 fatalClosedCessna 310H · Indianapolis, INNTSB IAD80FLQ15Accident · Minor injuriesClosedBell 206L · Pikeville, KYNTSB LAX80DVG17Accident · No injuriesClosedCessna TU206F · Willows, CANTSB DEN80FA027Accident · 1 fatalClosedCessna 172M · Englewood, CONTSB LAX80FUA10Accident · No injuriesClosedPiper PA-30 · Santa Ana, CANTSB LAX80DVA21Accident · No injuriesClosedPiper PA-28 · Modesto, CANTSB ANC80DAA09Accident · Serious injuriesClosedStinson 108-3 · Kevinjik Lk, AKNTSB NYC80FFJ04Accident · No injuriesClosedCessna 172N · Cortland, NYNTSB SEA80FYM20Accident · No injuriesClosedPiper PA-24 · Vancouver, WANTSB LAX80FA062Accident · 2 fatalClosedCessna 402C · Crescent City, CANTSB NYC80FFA08Accident · Minor injuriesClosedBellanca 7ECA · Morrisonville, NYNTSB MKC80FCG17Accident · No injuriesClosedBeech A23-19 · Greenfield, MONTSB ANC80DAA08Accident · No injuriesClosedBellanca 7GCBC · Chandler Lake, AKNTSB DEN80AA026Accident · Minor injuriesClosedPiper PA-31 · Moab, UTNTSB CHI80FET10Accident · No injuriesClosedCessna 402B · Dowagiac, MINTSB NYC80FGT06Accident · No injuriesClosedCessna 150M · Thomasville, PANTSB DEN80DTC08Accident · No injuriesClosedLuscombe 8E · Cheyenne, WYNTSB NYC80FNC14Accident · Serious injuriesClosedCessna 170 · Dublin, NHNTSB LAX80DVA16Accident · Minor injuriesClosedPiper PA-30 · Fresno, CANTSB CHI80FA027Accident · 1 fatalClosedCessna 172XP · Indianapolis, INNTSB LAX80DVA17Accident · No injuriesClosedCessna 188B · Dos Palos, CANTSB FTW80FPD12Accident · No injuriesClosedCessna 177 · Alvarado, TXNTSB FTW80IA044Incident · No injuriesClosedDouglas DC-9 · Dallas, TXNTSB MKC80FCA09Accident · No injuriesClosedBeech B-55 · Chesterfield, MONTSB LAX80FUG20Accident · No injuriesClosedCessna 182P · Corona, CANTSB ANC80FA031Accident · 3 fatalClosedPilatus PC6B1H · West Dease, AKNTSB LAX80FUG19Accident · Serious injuriesClosedCessna TU206F · El Monte, CANTSB IAD80FLQ12Accident · No injuriesClosedCessna 150 · Louisville, KYNTSB ANC80DAG30Accident · No injuriesClosedPiper PA-18A · Cantwell, AKNTSB ANC80DAG29Accident · Minor injuriesClosedPiper PA-12 · Skwentna, AKNTSB SEA80FA019Accident · 5 fatalClosedRockwell 700 · Mukilteo, WANTSB MIA80FA033Accident · 4 fatalClosedPtper PA-32 · Cedar Key, FLNTSB MKC80DCG13Accident · No injuriesClosedCessna 150K · Grain Valley, MO