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 FTW77FPD26Accident · 1 fatalClosedStarduster TOO · Alvord, TXNTSB NYC77FA063Accident · 1 fatalClosedBellanca 8KCAB · Haverhill, MANTSB MKC77FA024Accident · 4 fatalClosedCessna 172M · Gordon, NENTSB FTW77FPG43Accident · No injuriesClosedPiper PA-25 · Evening Star, ARNTSB FTW77DQG32Accident · No injuriesClosedPiper PA-25 · Lamesa, TXNTSB FTWMMDRG51Accident · No injuriesClosedBellanca 8GCBC · Manor, TXNTSB FTW77FA059Accident · 2 fatalClosedAmerican AA-1A · Marion, TXNTSB SEA77DYA23Accident · No injuriesClosedPiper PA-12 · Marsing, IDNTSB OAK77FA035Accident · 2 fatalClosedBeech A33 · Coalinga, CANTSB MKC77DCJ23Accident · Minor injuriesClosedBellanca 8GCBC · Kearney, NENTSB FTW77FPG42Accident · 1 fatalClosedGrumman G-164A · Dumas, ARNTSB CHI77FEV26Accident · Serious injuriesClosedPiper J-3 · Manito, ILNTSB FTW77FPJ20Accident · Serious injuriesClosedCessna A188B · Cherokee, OKNTSB FTW77FPJ19Accident · Minor injuriesClosedPiper PA-25 · Perry, OKNTSB MIA77FKJ44Accident · No injuriesClosedGrumman G-164A · Centreville, ALNTSB LAX77DVA35Accident · No injuriesClosedHiller Acft UH-12E · Bakersfield, CANTSB MIA77DKG32Accident · No injuriesClosedPiper PA-25 · Rebecca, GANTSB FTW77DRG50Accident · No injuriesClosedCessna 188 · Fowlerton, TXNTSB FTW77DRA25Accident · No injuriesClosedGrumman G-164A · Garwood, TXNTSB SEA77FA035Accident · 2 fatalClosedTaylorcraft L-2B · Yelm, WANTSB FTW77FQG29Accident · No injuriesClosedCessna A188B · Plainview, TXNTSB FTW77FPG41Accident · No injuriesClosedGrumman G-164A · Georgetown, ARNTSB CHI77FEG19Accident · 2 fatalClosedBellanca 7KCAB · Goshen, OHNTSB SEA77DYM34Accident · Serious injuriesClosedHiller Acft UH-12C · Albany, ORNTSB OAK77DVG37Accident · No injuriesClosedGrumman G-164 · Gridley, CANTSB MKC77FCA21Accident · 1 fatalClosedPiper PA-25 · Poplar Bluff, MONTSB MIA77FKG30Accident · Minor injuriesClosedBell 206B · Franklin, GANTSB LAX77FUA16Accident · No injuriesClosedChampion 7ECA · S.J.Capistrano, CANTSB FTW77FQD19Accident · 1 fatalClosedBellanca 7KCAB · El Paso, TXNTSB FTW77FPM11Accident · No injuriesClosedPiper PA-25 · Pryor, OKNTSB FTW77DQG31Accident · No injuriesClosedPiper PA-25 · San Angelo, TXNTSB DEN77FA044Accident · 2 fatalClosedBeech 19A · Wheatland, WYNTSB NYC77FA061Accident · 1 fatalClosedPiper PA-16 · Collins, NYNTSB OAK77FVG36Accident · Serious injuriesClosedBell 214B-1 · Happy Camp, CANTSB SEA77FTA19Accident · Minor injuriesClosedCessna 188 · Billings, MTNTSB OAK77FVM14Accident · No injuriesClosedFairchild FH1100 · San Francisco, CANTSB FTW77FPM10Accident · 1 fatalClosedPiper J-3 · Jay, OKNTSB FTW77DRA23Accident · Minor injuriesClosedGrumman G-164A · Katy, TXNTSB FTW77DQG30Accident · No injuriesClosedHughes 269B · Post, TXNTSB NYC77FA060Accident · 4 fatalClosedPiper PA-28 · Keeseville, NYNTSB NYC77FHJ21Accident · Minor injuriesClosedSchweizer 2-32 · Brookhaven, NYNTSB FTW77FPD24Accident · Minor injuriesClosedPiper J3C-65 · Roanoke, TXNTSB SEA77FYM32Accident · 1 fatalClosedCessna 150M · Independence, ORNTSB MKC77FA023Accident · 4 fatalClosedPiper PA-28 · White Bear Lke, MNNTSB FTW77FPA12Accident · No injuriesClosedCessa 150 · Streetman, TXNTSB OAK77FA032Accident · 4 fatalClosedCessna 172M · Lahaina Maui, HINTSB NYC77FFJ21Accident · No injuriesClosedPiper PA-36 · Batavia, NYNTSB MKC77FTK20Accident · Serious injuriesClosedAeronca 7GCB · Northville, SDNTSB FTW77DPG36Accident · No injuriesClosedGrumman G-164A · Keiser, ARNTSB CHI77FEX28Accident · No injuriesClosedPiper PA-25 · Westfield, IN