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 FTW81IA057Incident · No injuriesClosedDouglas DC3A · Midland, TXNTSB ATL81DKW14Accident · Minor injuriesClosedVolksplane 1 · Crossville, TNNTSB ATL81FLJ05Accident · Minor injuriesClosedCessna 172M · Belhaven, NCNTSB DEN81FTA06Accident · No injuriesClosedCessna 182 · Wolf Point, MTNTSB ATL81FA057Accident · 1 fatalClosedAerostar 601P · Roanoke, VANTSB MKC81DCJ07Accident · Minor injuriesClosedCessna 182 · Cody, NENTSB FTW81FRD16Accident · No injuriesClosedGrumman G-164A · Bell City, LANTSB MKC81FCA08Accident · Minor injuriesClosedPiper PA-28 · Chesterfield, MONTSB LAX81FUJ44Accident · Minor injuriesClosedCessna 172 · Scottsdale, AZNTSB ANC81FAD04Accident · No injuriesClosedTaylorcraft F19 · Wht Sulphr Spg, AKNTSB FTW81FRA21Accident · No injuriesClosedBeech A100 · Houston, TXNTSB CHI81FA035Accident · 1 fatalClosedPiper PA-23 · Lowell, MINTSB SEA81FYM81Accident · Minor injuriesClosedBeech B24R · Salem, ORNTSB LAX81FVM16Accident · No injuriesClosedPiper PA-28 · San Martin, CANTSB DEN81FTC11Accident · Minor injuriesClosedCessna 140 · Wapiti, WYNTSB DEN81DTK06Accident · No injuriesClosedCessna 180 · Gettysburg, SDNTSB FTW81IA048Incident · No injuriesClosedDouglas DC-3 · Mcallen, TXNTSB FTW81DPD15Accident · No injuriesClosedCessna 188 · Throckmorton, TXNTSB FTW81DPG13Accident · No injuriesClosedPiper PA-25 · Keiser, ARNTSB NYC81FGT02Accident · Serious injuriesClosedCessna 402B · Bloomsburg, PANTSB NYC81FA031Accident · Minor injuriesClosedBeech H18 · Hazelton, PANTSB FTW81DPJ11Accident · Serious injuriesClosedCessna A188B · Duncan, OKNTSB ATL81FKW12Accident · No injuriesClosedCessna 150F · Lebanon, TNNTSB NYC81FHD15Accident · Minor injuriesClosedMooney M20K · Atlantic City, NJNTSB ATL81FIG09Accident · No injuriesClosedPiper PA-28 · Annapolis, MDNTSB CHI81FEE21Accident · Serious injuriesClosedCessna 150F · Marengo, ILNTSB LAX81FVM14Accident · No injuriesClosedEL Camino 70-1 · Half Moon Bay, CANTSB CHI81FEM11Accident · Serious injuriesClosedPiper J3C · Grand Haven, MINTSB CHI81FEM10Accident · Minor injuriesClosedPiper PA-34 · Manistee, MINTSB ATL81FA052Accident · 4 fatalClosedBeech B23 · Mobile, ALNTSB NYC81FFA13Accident · 2 fatalClosedCessna 150K · Hudson, NYNTSB MIA81FLD26Accident · Serious injuriesClosedPiper PA-28 · Lake Wales, FLNTSB MIA81DKT30Accident · No injuriesClosedPiper PA-38 · Boynton Beach, FLNTSB LAX81FVD13Accident · No injuriesClosedCessna 340 · Santa Rosa, CANTSB NYC81FHD14Accident · Minor injuriesClosedBeech 35-B33 · Camden, NJNTSB LAX81DUJ36Accident · No injuriesClosedPiper PA-28 · Apache Jct, AZNTSB LAX81FVM13Accident · No injuriesClosedCessna 120 · Watsonville, CANTSB FTW81FA038Accident · 1 fatalClosedBeech 95-B55 · Beaumont, TXNTSB LAX81DVA25Accident · Minor injuriesClosedCessna 182P · Lost Hills, CANTSB ATL81FLT04Accident · Minor injuriesClosedAir Tractor AT-301 · Crenshaw, MSNTSB NYC81FHD13Accident · Minor injuriesClosedCessna 177RG · Philadelphia, PANTSB NYC81FA030Accident · 2 fatalClosedCessna 310R · North Adams, MANTSB MIA81FLA13Accident · Minor injuriesClosedBeech 65 · Tallahassee, FLNTSB MIA81FA048Accident · 2 fatalClosedCessna 177 · Lutz, FLNTSB FTW81FRA17Accident · Minor injuriesClosedBeech A35 · La Porte, TXNTSB NYC81FNA11Accident · No injuriesClosedGrum Amer AA-5B · Taunton, MANTSB ATL81FKW11Accident · No injuriesClosedPiper PA-28 · Woodbury, TNNTSB ATL81FID11Accident · Serious injuriesClosedCessna 172 · Chesapeake, VANTSB LAX81DUJ34Accident · No injuriesClosedBeech F33A · Goodyear, AZNTSB FTW81DA032Accident · Minor injuriesClosedBeech 95-C55 · Little Rock, AR