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 ANC73DAH02Accident · No injuriesClosedCessna 180 · Newtok, AKNTSB ANC73AA049Accident · No injuriesClosedPiper PA-32 · Elim, AKNTSB NYC74FNA04Accident · No injuriesClosedBensen B8M · Plymouth, MANTSB MKC73DCQ35Accident · No injuriesClosedAeronca 7AC · Hunter, KSNTSB NYC73AN148Accident · 2 fatalClosedBeech D18S · Feeding Hill, MANTSB FTW73FPGK3Accident · No injuriesClosedGrumman G-164A · Gillett, ARNTSB MKC73DCG48Accident · Minor injuriesClosedBoeing B75N1 · Garnett, KSNTSB FTW73FRJ38Accident · Minor injuriesClosedBeech B23 · Monroe, LANTSB SEA73FYC30Accident · Serious injuriesClosedCessna 140 · Sisters, ORNTSB FTW73FRD32Accident · No injuriesClosedCessna 180 · St.Francisvlle, LANTSB OAK73FJA22Accident · Minor injuriesClosedBell 206A · Honolulu, HINTSB MIA73FLA39Accident · No injuriesClosedOwl-Stol 150 · Palatka, FLNTSB LAX73FUG54Accident · Minor injuriesClosedCessna 185E · Big Bear Cy, CANTSB ANC73FAA23Accident · No injuriesClosedPiper PA-22 · Fairbanks, AKNTSB ANC73FAA22Accident · No injuriesClosedPiper PA-12 · Delta Junctn, AKNTSB MKC73AK068Accident · 5 fatalClosedCessna 411 · Minneapolis, MNNTSB DEN73DTE81Accident · No injuriesClosedPiper PA-28 · Salida, CONTSB OAK73FJA21Accident · Minor injuriesClosedPiper PA-28 · Honolulu, HINTSB MKC73DCQ33Accident · No injuriesClosedPiper PA-28 · Marysville, KSNTSB MIA73DKG80Accident · No injuriesClosedCessna 140 · Marietta, GANTSB LAX73FUQ35Accident · No injuriesClosedBell 47G · San Frnando, CANTSB SEA73FYA27Accident · No injuriesClosedPiper PA-20 · Caldwell, IDNTSB MKC73DER63Accident · No injuriesClosedPiper PA-28 · Lake Benton, MNNTSB FTW73FRJ36Accident · No injuriesClosedCessna 150 · Jefferson, TXNTSB MKC73DER62Accident · No injuriesClosedCessna 150 · Hallock, MNNTSB MIA73DLD83Accident · Minor injuriesClosedPiper PA-12 · Basinger, FLNTSB ANC73FAG95Accident · Serious injuriesClosedPilatus PC-6 · Anchorage, AKNTSB MKC73FCJ41Accident · 1 fatalClosedChampion 7GCBC · Lexington, NENTSB FTW37DPD36Accident · No injuriesClosedBoeing E75N1 · Henrietta, TXNTSB SEA73FYA26Accident · Serious injuriesClosedPiper PA-22 · Nyssa, ORNTSB MKC73FER58Accident · Minor injuriesClosedCessna 140 · Grand Rapids, MNNTSB MIA73DLD80Accident · No injuriesClosedPiper PA-23 · Venice, FLNTSB NYC73FHM31Accident · Serious injuriesClosedGlobe GC-1B · Fairfield, NJNTSB FTW73FRD26Accident · No injuriesClosedGrumman G-164A · Kinder, LANTSB FTW73FPM09Accident · No injuriesClosedCessna A188 · Grove, OKNTSB FTW73AF069Accident · Minor injuriesClosedCessna 180 · Houma, LANTSB CHI73FEI39Accident · No injuriesClosedPiper PA-28 · Akron, OHNTSB OAK73AP040Accident · 2 fatalClosedAero Comdr 112 · S.Lke Tahoe, CANTSB MKC73FER57Accident · No injuriesClosedCessna 140 · Anoka, MNNTSB LAX73FUJ78Accident · Minor injuriesClosedErco 415-CD · Casa Grande, AZNTSB LAX73AL054Accident · 3 fatalClosedCessna T210J · Long Beach, CANTSB FTW73DRD22Accident · No injuriesClosedGrumman G-164 · Welsh, LANTSB NYC73FNA46Accident · No injuriesClosedMooney M20C · Hyannis, MANTSB MIA73DKT92Accident · No injuriesClosedCessna 150 · Ft Lauderdale, FLNTSB MKC73DCD60Accident · No injuriesClosedCessna 120 · Councl Bluff, IANTSB DEN73DQA38Accident · No injuriesClosedMooney M20F · Ramah, NMNTSB DEN73DTM29Accident · No injuriesClosedCessna 180 · Bryce Canyon, UTNTSB MIA73DKQ26Accident · No injuriesClosedCessna 177 · Clarksdale, MSNTSB MKC73FER51Accident · Serious injuriesClosedCessna 170B · Burnsville, MNNTSB MKC73FCJ35Accident · Serious injuriesClosedPiper PA-18 · Maywood, NE