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 FTW80DPG48Accident · No injuriesClosedCessna 188 · Paragould, ARNTSB ATL80DKG12Accident · No injuriesClosedPiper PA-25 · Screven, GANTSB FTW80FPM14Accident · 1 fatalClosedBell 47G · Calvin, OKNTSB FTW80DPG46Accident · No injuriesClosedAir Tractor AT-301 · Palestine, ARNTSB CHI80FEV27Accident · No injuriesClosedGrumman G-164B · Atlanta, ILNTSB FTW80DPG45Accident · No injuriesClosedCessna A188B · Tyronza, ARNTSB CHI80FEC23Accident · Serious injuriesClosedGreat Lakes 2T-1 · Mason, MINTSB ATL80FKQ16Accident · Minor injuriesClosedTomcat Mark 5 · Tutwiler, MSNTSB CHI80FEI30Accident · Serious injuriesClosedPiper PA-25 · Sulphur Sprgs, OHNTSB MKC80FCA26Accident · No injuriesClosedCessna 188B · Advance, MONTSB LAX80FA120Accident · 4 fatalClosedCessna U206C · Ely, NVNTSB CHI80DEX23Accident · No injuriesClosedCessna 188B · Saluda, INNTSB ATL80FIJ06Accident · Serious injuriesClosedBell 206B · Pennington Gap, VANTSB DEN80DTK15Accident · No injuriesClosedPiper PA-36 · Groton, SDNTSB ATL80FLT09Accident · No injuriesClosedGrumman G-164 · Olive Branch, MSNTSB FTW80DPG44Accident · No injuriesClosedGrumman G-164 · Heth, ARNTSB ATL80FKQ13Accident · No injuriesClosedCessna 188 · Charleston, MSNTSB SEA80DYM43Accident · No injuriesClosedPiper PA-36 · The Dalles, ORNTSB SEA80FYA19Accident · 1 fatalClosedCallair A-9 · Homedale, IDNTSB FTW80DPG43Accident · No injuriesClosedPiper PA-11 · Hazen, ARNTSB ATL80DKW15Accident · No injuriesClosedBell 47G-3B · Livingston, TNNTSB SEA80FYP26Accident · Minor injuriesClosedBell 47G-4 · Mattawa, WANTSB MIA80FA081Accident · 2 fatalClosedDehavilland DH-82A · Bunnell, FLNTSB CHI80DER52Accident · Minor injuriesClosedBell OH-13 · Bixby, MNNTSB LAX80DVA50Accident · Minor injuriesClosedCessna 150 · Woodlake, CANTSB CHI80FER55Accident · 1 fatalClosedCassutt 111M · Warren, MNNTSB FTW80DPG42Accident · Minor injuriesClosedPiper PA-18 · Hazen, ARNTSB CHI80FEK18Accident · No injuriesClosedSikorsky S-55B · Rushville, OHNTSB DEN80FA046Accident · 1 fatalClosedCessna 172M · Ft Collins, CONTSB LAX80FVD29Accident · No injuriesClosedBell 47G-5 · Stockton, CANTSB DEN80FTA16Accident · Serious injuriesClosedCallair A-9B · Bridger, MTNTSB ATL80FA063Accident · 2 fatalClosedPiper J-3 · Williamson, GANTSB MIA80FA074Accident · 2 fatalClosedPiper PA-28 · Orlando, FLNTSB ATL80FLG15Accident · No injuriesClosedHughes 269 · Beaufort, SCNTSB FTW80FRG51Accident · Minor injuriesClosedGrumman G-164 · Santa Rosa, TXNTSB ATL80FA061Accident · 2 fatalClosedBellanca 7GCBC · Worton, MDNTSB MKC80FCQ22Accident · Minor injuriesClosedCessna 150L · Mcpherson, KSNTSB MKC80DCQ21Accident · No injuriesClosedPiper PA-36 · Kanorado, KSNTSB ANC80FA055Accident · Minor injuriesClosedPiper PA-16 · Big Lake, AKNTSB SEA80FA035Accident · 3 fatalClosedPiper PA-28 · Couer D'Alene, IDNTSB MIA80FA070Accident · 1 fatalClosedPiper J3C · Dunedin, FLNTSB DEN80FTI08Accident · No injuriesClosedPiper PA-25 · Oilmont, MTNTSB DEN80FTC19Accident · Minor injuriesClosedCessna 152 · Sheridan, WYNTSB CHI80FEI26Accident · 2 fatalClosedN American AT-6 · Bowling Green, OHNTSB CHI80FA049Accident · 2 fatalClosedBellanca 8KCAB · Clifton, ILNTSB FTW80DRJ25Accident · No injuriesClosedGrumman G-164A · Jones, LANTSB DEN80FTM26Accident · 1 fatalClosedSkybolt Steen · Brigham City, UTNTSB DEN80FTE58Accident · 1 fatalClosedPiper PA-25 · Meeker, CONTSB CHI80DEM30Accident · No injuriesClosedPiper PA-25 · South Haven, MINTSB ATL80FKJ13Accident · Minor injuriesClosedPitts S-2S · Alabaster, AL