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 CHI82FEP05Accident · No injuriesClosedPiper PA-28 · Waukesha, WINTSB CHI82FEE03Accident · 1 fatalClosedSonerai II · Romeoville, ILNTSB MKC82FCG03Accident · Minor injuriesClosedBensen B-8 · Joplin, MONTSB FTW82DQD01Accident · Minor injuriesClosedBeech 19A · Sunland Park, NMNTSB DEN82FTE04Accident · No injuriesClosedCessna 182P · Steamboat Spgs, CONTSB FTW82FRD03Accident · No injuriesClosedPiper PA-38 · Lake Charles, LANTSB FTW82FPA04Accident · No injuriesClosedPiper PA-30 · Addison, TXNTSB CHI82DEM01Accident · No injuriesClosedQuickie · Plainwell, MINTSB CHI82FEC03Accident · No injuriesClosedBeech A-35 · Troy, MINTSB CHI82FA003Accident · 4 fatalClosedCessna 310I · Hainesville, ILNTSB ANC82DA001Accident · Serious injuriesClosedCessna 207 · Akaichak, AKNTSB FTW82DRA03Accident · Serious injuriesClosedCessna 150M · Spring Creek, TXNTSB ATL82FA006Accident · 1 fatalClosedCessna A150L · Oak Ridge, TNNTSB NYC82FFA01Accident · Serious injuriesClosedPiper PA-28 · Milton, NYNTSB ATL82DLT01Accident · No injuriesClosedCessna A188B · Kenton, TNNTSB MIA82FKA01Accident · No injuriesClosedPiper PA-28 · Caba Rojo, PRNTSB FTW82FQA02Accident · Minor injuriesClosedBarnes AX-7 · Albuquerque, NMNTSB NYC82FA001Accident · 2 fatalClosedFairchild M-62A · Carrabassett, MENTSB FTW82DPD01Accident · No injuriesClosedPiper PA-36 · Munday, TXNTSB ATL82FKQ01Accident · No injuriesClosedCessna 172N · Ocean Springs, MSNTSB LAX82FUG01Accident · No injuriesClosedPiper PA-28 · Rialto, CANTSB CHI82FEP03Accident · Serious injuriesClosedCessna 402B · Park Falls, WINTSB CHI82FA001Accident · 1 fatalClosedBeech D-18S · Fraser, MINTSB SEA82DYK01Accident · No injuriesClosedPiper PA-18A · Burns, ORNTSB ATL82FLQ01Accident · No injuriesClosedCessna 172RG · Wheeling, ILNTSB SEA82FYA01Accident · Serious injuriesClosedChampion 7ECA · Ola, IDNTSB LAX81DUK06Accident · Minor injuriesClosedCessna T210M · Yuma, AZNTSB LAX81DUJ81Accident · No injuriesClosedAyers S2R · Poston, AZNTSB ANC81DAG92Accident · Serious injuriesClosedPiper PA-18 · Anchorage, AKNTSB LAX81FA132Accident · 1 fatalClosedCessna 150 · Hemet, CANTSB LAX81DUG52Accident · No injuriesClosedTexas Hel OH-13E · Blythe, CANTSB FTW81FRG66Accident · No injuriesClosedCessna 421C · Hebbronville, TXNTSB DEN81FA069Accident · 1 fatalClosedCessna 185 · Collbran, CONTSB FTW81DPD42Accident · No injuriesClosedBeech 19A · Lewisville, TXNTSB ANC81DAA36Accident · No injuriesClosedCessna 185 · Umiat, AKNTSB FTW81FA146Accident · 1 fatalClosedHughes 269C · Startzville, TXNTSB FTW81FQG64Accident · Minor injuriesClosedCessna A188B · Hereford, TXNTSB FTW81FPG65Accident · Serious injuriesClosedVans RV3 · Little Rock, ARNTSB ANC81DAG97Accident · No injuriesClosedPiper PA-12 · Wasilla, AKNTSB ANC81DAD08Accident · No injuriesClosedPiper PA-23 · Yakutat, AKNTSB SEA81FYM44Accident · Minor injuriesClosedEvans Spcl 1 · Aurora, ORNTSB LAX81FA128Accident · 2 fatalClosedErco 415-D · Carefree, AZNTSB FTW81DPG67Accident · No injuriesClosedAyres S2-R · Harrisburg, ARNTSB CHI81FA103Accident · 4 fatalClosedMooney M20F · Detroit, MINTSB ANC81DAG86Accident · No injuriesClosedPiper PA-18 · Valdez, AKNTSB SEA81FA056Accident · 2 fatalClosedAeronca 7AC · Myrtle Creek, ORNTSB NYC81FFJ25Accident · Serious injuriesClosedAeronca 7AC · Honeoye Falls, NYNTSB FTW81FA143Accident · 1 fatalClosedCessna 152 · Fort Worth, TXNTSB DEN81FTE71Accident · Serious injuriesClosedCaldwell Folker · Broomfield, CONTSB CHI81FEI30Accident · No injuriesClosedCessna TU206F · Rock Creek, OH