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 LAX80FVA12Accident · Serious injuriesClosedCessna AL52 · Mariposa, CANTSB FTW80DA041Accident · Serious injuriesClosedRepublic P47D · Tulsa, OKNTSB LAX80DXQ16Accident · No injuriesClosedBellanca 8GCBC · Carson City, NVNTSB ANC80FA028Accident · No injuriesClosedCessna 207 · Atkasuk, AKNTSB MIA80FKJ17Accident · Serious injuriesClosedStinson 108-1 · Irvington, ALNTSB MIA80DKT25Accident · Serious injuriesClosedMooney M20C · Marco Island, FLNTSB CHI80FEG09Accident · No injuriesClosedRyan Navion · Troy, OHNTSB NYC80FNC09Accident · No injuriesClosedCessna 150 · Sanford, MENTSB FTW80FRG23Accident · No injuriesClosedGrumman G-164 · Pharr, TXNTSB MKC80FCG10Accident · No injuriesClosedCessna 150L · Ft.Leavenworth, KSNTSB MIA80FLD36Accident · No injuriesClosedPiper PA-24 · Clearwater, FLNTSB MIA80FKG16Accident · Serious injuriesClosedGrum Amer AA-5A · Atlanta, GANTSB NYC80FA023Accident · 1 fatalClosedGrum Amer AA-1B · Morganville, NJNTSB DEN80FA022Accident · 1 fatalClosedAero Comdr 560 · Magdalena, NMNTSB SEA80FYK04Accident · Serious injuriesClosedRand KR-2 · Brookings, ORNTSB IAD80FKM08Accident · No injuriesClosedCessna 175 · Thomasville, NCNTSB ANC80FA027Accident · 1 fatalClosedCessna U206G · Kasigluk, AKNTSB ANC80DAG27Accident · No injuriesClosedPiper PA-23 · Nondalton, AKNTSB IAD80DKW07Accident · No injuriesClosedCessna A150L · Oliver Spgs, TNNTSB LAX80FA039Accident · No injuriesClosedCessna 310D · Irvine, CANTSB LAX80DUM09Accident · No injuriesClosedBoeing A75N1 · Ramoa, CANTSB CHI80FA023Accident · 1 fatalClosedCessna 411 · Columbus, OHNTSB LAX80FVW11Accident · Serious injuriesClosedCessna 150 · Searchlight, NVNTSB CHI80FEM13Accident · No injuriesClosedCessna 185 · Allegan, MINTSB CHI80FEI10Accident · No injuriesClosedCessna 150M · Norton, OHNTSB SEA80FYM13Accident · Serious injuriesClosedMaule M-5 · Portland, ORNTSB NYC80FA019Accident · 2 fatalClosedBeech B19 · Bogota, NJNTSB MKC80FA018Accident · 1 fatalClosedCessna 150 · Newton, KSNTSB MIA80DLD30Accident · Minor injuriesClosedBeech B-35 · Kissimmee, FLNTSB LAX80DVA10Accident · No injuriesClosedGrumman G-164A · Fresno, CANTSB MIA80FA029Accident · Serious injuriesClosedPiper PA-31 · St.Croix, VINTSB LAX80FVD08Accident · Minor injuriesClosedCessna 182P · Petaluma, CANTSB LAX80FA035Accident · 1 fatalClosedCessna 152 · Mesa, AZNTSB FTW80FRA17Accident · No injuriesClosedLake 4-200 · Tomball, TXNTSB DEN80DTE19Accident · No injuriesClosedPiper PA28RT · Dove Creek, CONTSB FTW80FA033Accident · 1 fatalClosedCessna 172 · Tulsa, OKNTSB FTW80FA031Accident · 2 fatalClosedPiper PA-23 · Ft Worth, TXNTSB IAD80DLQ09Accident · Minor injuriesClosedCessna 172M · Gilbertsville, KYNTSB IAD80FLQ07Accident · Serious injuriesClosedPiper PA-28R · Whitesburg, KYNTSB LAX80DVG12Accident · Minor injuriesClosedAir Tractor AT-301 · Woodland, CANTSB DEN80FTE16Accident · Minor injuriesClosedCessna 150 · Paonia, CONTSB FTW80FPG09Accident · Minor injuriesClosedPiper PA-28 · N Little Rock, ARNTSB LAX80FVM10Accident · No injuriesClosedBeech 65-90 · Monterey, CANTSB DEN80FTC03Accident · Minor injuriesClosedBeech B95A · Rock Springs, WYNTSB LAX80FA031Accident · 2 fatalClosedBellanca 8KCAB · San Fernando, CANTSB LAX80DJA07Accident · Minor injuriesClosedGrum Amer AA-5A · Honolulu, HINTSB MIA80FLD22Accident · No injuriesClosedPiper PA-28 · Tampa, FLNTSB FTW80FRG15Accident · Minor injuriesClosedPiper PA-32 · Encinal, TXNTSB SEA80FTI02Accident · Serious injuriesClosedPiper PA-32R · Chester, MTNTSB FTW80FA023Accident · 1 fatalClosedCessna 180K · Harvey, LA