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 FTW74FRJ02Accident · Minor injuriesClosedAmer Avco AA-1B · West Monroe, LANTSB FTW74FRG01Accident · No injuriesClosedPiper PA-28 · Austin, TXNTSB CHI74DEM02Accident · No injuriesClosedPiper PA-25 · Bay City, MINTSB IAD74AI001Accident · 2 fatalClosedPiper PA-28 · W.Slphr Spg, WVNTSB DEN74FTE01Accident · Minor injuriesClosedCessna 172D · Colorado Spg, CONTSB IAD73FIA17Accident · No injuriesClosedNavion G · West Haymarket, VANTSB CHI73FEG30Accident · No injuriesClosedStarduster SA-200 · New Carlisle, OHNTSB MIA73FKQ33Accident · No injuriesClosedGrumman G-164A · Boyle, MSNTSB FTW73FRD38Accident · No injuriesClosedGrumman G-164 · Thornwell, LANTSB CHI73FEK25Accident · Minor injuriesClosedAmer Avco AA-1A · Dublin, OHNTSB FTW73FPD47Accident · No injuriesClosedBeech V35B · Smithfield, TXNTSB FTW73DPG63Accident · No injuriesClosedCessna 188 · Mcgehee, ARNTSB OAK73FVW24Accident · Minor injuriesClosedCessna 150F · Jean, NVNTSB MKC73AK075Accident · 1 fatalClosedPiper PA-18 · Grant, NENTSB SEA73AS039Accident · No injuriesClosedBeech 95-B55 · Hailey, IDNTSB MIA73FKQ32Accident · No injuriesClosedCessna A188A · Crowder, MSNTSB DEN73FTE95Accident · No injuriesClosedCessna 150 · Broomfield, CONTSB MIA73AM114Accident · 1 fatalClosedPiper PA-28 · Mableton, GANTSB UNK73X0115Accident · No injuriesClosedCessna 210 · Falmouth, JamaicaNTSB OAK73DVA65Accident · No injuriesClosedPiper PA-25 · Merced, CANTSB DEN73DQA48Accident · No injuriesClosedPiper PA-18 · Corona, NMNTSB UNK73X0114Accident · Minor injuriesClosedDouglas DC3 · Tamnrsset, Antigua & BarbudaNTSB MIA73AM111Accident · 1 fatalClosedCessna 172L · Newberry, FLNTSB SEA73DYA32Accident · No injuriesClosedPiper PA-25 · Mountain Home, IDNTSB DEN73DTM32Accident · Minor injuriesClosedPiper PA-28 · Beaver, UTNTSB MIA73AM109Accident · 1 fatalClosedPiper PA-31P · Tampa, FLNTSB CHI73FEI49Accident · Minor injuriesClosedCessna 170B · North Lima, OHNTSB MKC73DCG49Accident · No injuriesClosedN.American Navion · Independence, MONTSB CHI73FEK24Accident · Serious injuriesClosedBeech 19A · Columbus, OHNTSB NYC73DFJ27Accident · Minor injuriesClosedCessna 150 · Canandaigua, NYNTSB FTW73FPM16Accident · No injuriesClosedAero Comdr A-9B · Hallett, OKNTSB DEN73FQA46Accident · No injuriesClosedBell 47G-3B · Cuba, NMNTSB NYC73AN151Accident · Minor injuriesClosedConvair 580 · Pittsburgh, PANTSB OAK73FXQ35Accident · Serious injuriesClosedMooney M-20E · Tahoe Keys, CANTSB CHI73AC096Accident · 1 fatalClosedCessna 170B · Waterford, MINTSB LAX73FUG62Accident · No injuriesClosedCharger MA-5 · Corona, CANTSB CHI73FEG28Accident · Serious injuriesClosedCessna 140 · Union, OHNTSB NYC73AN150Accident · 1 fatalClosedPiper PA-28 · Haddam, CTNTSB MKC73DCG43Accident · No injuriesClosedPiper PA-28 · Stover, MONTSB MIA73FLA43Accident · 1 fatalClosedBoeing E75 · Trenton, FLNTSB LAX73FUJ83Accident · Serious injuriesClosedStinson 108-3 · Tucson, AZNTSB LAX73FUD10Accident · Minor injuriesClosedErco 415-C · Hawthorne, CANTSB FTW73FRA34Accident · No injuriesClosedPiper PA-28 · Pearland, TXNTSB CHI73DEE65Accident · No injuriesClosedCessna 150 · Joliet, ILNTSB CHI73AC095Accident · 1 fatalClosedRyan ST-3KR · Greenfield, INNTSB DEN73FTE84Accident · No injuriesClosedCessna P206B · Fort Carson, CONTSB LAX73DUJ82Accident · No injuriesClosedCessna A188B · Parker, AZNTSB FTW73FPM13Accident · No injuriesClosedCessna 182P · Sallisaw, OKNTSB NYC73FNC74Accident · Serious injuriesClosedCessna 150H · Ludlow, VTNTSB CHI73DEP63Accident · No injuriesClosedPiper PA-25 · Portage, WI