NTSB investigations
18,851 cases where the phase of flight was Maneuvering.
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 = 450)
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 = 450)
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 FTW81FPG03Accident · Serious injuriesClosedCessna 170B · Lakeview, ARNTSB LAX81FUJ06Accident · Serious injuriesClosedBell 47G-5 · San Luis Rey, AZNTSB FTW80DQD04Accident · No injuriesClosedPiper PA-18 · Tornillo, TXNTSB LAX81FA006Accident · 3 fatalClosedSikorsky S58DT · Lovelock, NVNTSB CHI81FCA02Accident · 2 fatalClosedAlvarez Polli · Grantfork, ILNTSB ATL81DLQ02Accident · No injuriesClosedBell 47G-2A · South Shore, KYNTSB ANC81DA003Accident · No injuriesClosedCessna 170B · Fort Yukon, AKNTSB ATL80DKW03Accident · No injuriesClosedGrumman G-164B · Portland, TNNTSB MKC81FA004Accident · 1 fatalClosedPiper J3C-65 · Senath, MONTSB FTW81FA003Accident · 1 fatalClosedCessna 182A · Kentwood, LANTSB SEA81DYA02Accident · No injuriesClosedPiper PA-28 · Blackfoot, IDNTSB FTW81DQG01Accident · No injuriesClosedCessna A188 · Dumas, TXNTSB ANC81FAG03Accident · Serious injuriesClosedCessna 180 · Big Lake, AKNTSB NYC81FA001Accident · 2 fatalClosedLake 4-200 · Little Egg, NJNTSB MKC81DCG02Accident · No injuriesClosedTaylorcraft BC12-D · Shell Knob, MONTSB LAX81FUM01Accident · 1 fatalClosedAir Tractor AT-300 · Imperial, CANTSB DEN81FTE01Accident · 2 fatalClosedStarduster SA-30 · Brighton, CONTSB DEN81FA001Accident · 3 fatalClosedHughes 369HS · Silverton, CONTSB LAX81FUJ03Accident · No injuriesClosedBell 47G-5 · Roll, AZNTSB SEA81FYM01Accident · 1 fatalClosedWalker Mini · Trout Lake, WANTSB FTW81FRJ01Accident · Serious injuriesClosedGrumman G-164 · Marksville, LANTSB LAX81FUJ01Accident · No injuriesClosedBeech F33A · Arlington, AZNTSB FTW81DPG01Accident · No injuriesClosedGrumman G-164A · Sherrill, ARNTSB CHI81DEV01Accident · Minor injuriesClosedGrumman G-164 · Golden, ILNTSB ATL80DLQ01Accident · No injuriesClosedPiper PA-25 · Paducah, KYNTSB FTW80DA125Accident · 1 fatalClosedPiper PA-28 · El Rito, NMNTSB CHI80FEP58Accident · No injuriesClosedPiper PA-25 · Evansville, WINTSB FTW80DRA53Accident · No injuriesClosedGrumman G-164A · Stonewall, TXNTSB LAX80DUK06Accident · No injuriesClosedBell 47G3B1 · Seligam, AZNTSB FTW80FPJ36Accident · Serious injuriesClosedCessna 188B · Altus, OKNTSB CHI80FEI44Accident · Minor injuriesClosedEL Tomcat MK-5A · Nevada, OHNTSB CHI80FEV39Accident · No injuriesClosedCessna 188 · Mill Shoals, ILNTSB SEA80FYP40Accident · Minor injuriesClosedGulf-Schwzr G-164B · Ritzville, WANTSB ANC80DAH13Accident · No injuriesClosedCessna 172 · Anchorage, AKNTSB LAX80FA141Accident · 2 fatalClosedBellanca 7ECA · Lake Mathews, CANTSB CHI80FEI43Accident · 2 fatalClosedBreezy RLU-1 · Green Spgs, OHNTSB NYC80FA089Accident · 3 fatalClosedPiper PA-22 · Hyner, PANTSB LAX80FVM41Accident · No injuriesClosedBoeing A75N1 · Watsonville, CANTSB LAX80FUJ97Accident · Serious injuriesClosedCessna A188B · Casa Blanca, AZNTSB MIA80DKJ40Accident · No injuriesClosedPiper PA-36 · Jackson Still, FLNTSB LAX80DUK02Accident · Minor injuriesClosedCessna A188 · Parker, AZNTSB CHI80FEP55Accident · 1 fatalClosedBensen B-8M · Franksville, WINTSB CHI80FEP54Accident · Minor injuriesClosedPiper PA-22 · Howard, WINTSB CHI80FEM47Accident · Minor injuriesClosedSkybolt Steen · Rose City, MINTSB ATL80FA096Accident · No injuriesClosedCessna 152 · Bluefield, WVNTSB ATL80FA095Accident · No injuriesClosedCessna 172 · Bluefield, WVNTSB LAX80FUK01Accident · No injuriesClosedBell 47G-5A · Yuma, AZNTSB FTW80FRA51Accident · No injuriesClosedGrumman G-164A · Winnie, TXNTSB SEA80FYK18Accident · Serious injuriesClosedBell 47J-2A · Brookings, ORNTSB MKC80FA055Accident · 1 fatalClosedMooney M20J · Summit, SD