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 NYC81DHA12Accident · Minor injuriesClosedSchweizer 1-35C · Blairstown, NJNTSB LAX81FA082Accident · 2 fatalClosedCessna 172A · Silver Peak, NVNTSB FTW81FQG25Accident · No injuriesClosedAir Tractor AT400 · Patricia, TXNTSB FTW81DRA27Accident · No injuriesClosedGrumman G-164 · Garwood, TXNTSB DEN81DTE33Accident · No injuriesClosedBell 206B · Rangley, CONTSB NYC81DFA15Accident · No injuriesClosedPiper PA-38 · Newcomb, NYNTSB FTW81FQD17Accident · Serious injuriesClosedQuickie 01 · El Paso, TXNTSB CHI81FEK16Accident · 1 fatalClosedFly Baby 1A · Zanesville, OHNTSB FTW81DRJ13Accident · No injuriesClosedGrumman G-164B · Mer Rouge, LANTSB FTW81DRD21Accident · No injuriesClosedGrumman G-164 · Chatagnier, LANTSB FTW81DPG20Accident · No injuriesClosedCessna 188 · Burdette, ARNTSB FTW81DRD20Accident · No injuriesClosedGrumman G-164A · Morse, LANTSB ATL81FA069Accident · 1 fatalClosedCessna 337G · Greensboro, NCNTSB ATL81DKM09Accident · No injuriesClosedMooney M20C · Asheboro, NCNTSB MKC81FCA10Accident · Serious injuriesClosedGrumman G-164 · Neelyville, MONTSB MKC81DCQ31Accident · No injuriesClosedCessna 172 · Manhattan, KSNTSB FTW81FA080Accident · Serious injuriesClosedPiper PA-31 · Houston, TXNTSB CHI81FEI15Accident · Minor injuriesClosedWest KR-1 · Youngstown, OHNTSB LAX81DVG27Accident · No injuriesClosedGrumman G164 · Maxwell, CANTSB ATL81FLG09Accident · Serious injuriesClosedSchempp STD CS · Chester, SCNTSB CHI81FEC23Accident · Minor injuriesClosedCessna 152 · Hadley, MINTSB NYC81FA042Accident · 1 fatalClosedCessna 401A · State College, PANTSB FTW81FQA25Accident · Minor injuriesClosedPiper PA-23 · Taos, NMNTSB FTW81FA075Accident · 2 fatalClosedMitsubishi MU-2B · Lajitas, TXNTSB MKC81FCQ30Accident · No injuriesClosedCessna 188 · Selden, KSNTSB CHI81FEG10Accident · No injuriesClosedCessna 172M · Miamisburg, OHNTSB MKC81DCJ10Accident · No injuriesClosedWeatherly 201C · Benkelman, NENTSB CHI81FEC21Accident · Minor injuriesClosedPiper PA-30 · Ann Arbor, MINTSB SEA81FA027Accident · Serious injuriesClosedCessna 175 · Burton, WANTSB LAX81DVG26Accident · No injuriesClosedGrumman G-164 · Liberty Island, CANTSB MKC81FCQ25Accident · Minor injuriesClosedCessna A188B · Mcpherson, KSNTSB LAX81FVD18Accident · No injuriesClosedCessna 172 · Oakland, CANTSB DEN81DTI04Accident · Minor injuriesClosedCessna 175 · Belgrade, MTNTSB ATL81DKM07Accident · Minor injuriesClosedBeech C23 · Greensboro, NCNTSB FTW81FQA22Accident · Serious injuriesClosedBeech C24R · Albuquerque, NMNTSB CHI81FER30Accident · Serious injuriesClosedCessna A188B · Wolverton, MNNTSB ATL81FA062Accident · 2 fatalClosedBeech 65-B80 · Pine Knot, KYNTSB ATL81FA061Accident · 1 fatalClosedCessna 188B · Hernando, MSNTSB MKC81FCG29Accident · No injuriesClosedPiper PA-25 · Clever, MONTSB FTW81DPJ15Accident · No injuriesClosedCessna 188 · Seiling, OKNTSB DEN81FTM15Accident · 1 fatalClosedLockheed P-38 · Salt Lake City, UTNTSB ANC81DA040Accident · No injuriesClosedEnstrom F280C · Aniak, AKNTSB MKC81FCQ22Accident · Minor injuriesClosedPiper PA-25 · Norton, KSNTSB ANC81DAD03Accident · No injuriesClosedCessna 172C · Luck Lake, AKNTSB NYC81FNE14Accident · No injuriesClosedCessna 152 · Canaan, CTNTSB NYC81FFA14Accident · No injuriesClosedPiper PA-38 · Knox, NYNTSB NYC81FA036Accident · Serious injuriesClosedPiper PA-12 · Leroy Township, PANTSB MKC81FCD11Accident · No injuriesClosedPiper PA-28 · Manson, IANTSB MIA81DKT35Accident · No injuriesClosedCessna 150 · Port Largo, FLNTSB DEN81FA025Accident · 2 fatalClosedCessna 421B · Lafayette, CO