NTSB investigations
18,850 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 OAK70D0043Accident · No injuriesClosedBell 47G-2 · Hollister, CANTSB MIA70F0213Accident · Minor injuriesClosedAero Comdr A-9B · Smithville, GANTSB DEN70F0034Accident · 1 fatalClosedHiller UH-12E · Graybull, WYNTSB MKC70F0087Accident · Minor injuriesClosedPiper PA-18 · Degraff, MNNTSB MIA70F0072Accident · Serious injuriesClosedPiper PA-25 · Isabela, PRNTSB FTW70F0114Accident · Serious injuriesClosedPiper PA-25 · Nazareth, TXNTSB OAK70D0084Accident · No injuriesClosedPiper PA-25 · Grover City, CANTSB OAK70D0060Accident · No injuriesClosedBoeing A75N1 · Sacramento, CANTSB OAK70D0038Accident · Minor injuriesClosedBoeing 75 · Merced, CANTSB MKC70D0098Accident · Minor injuriesClosedPiper PA-25 · La Plata, MONTSB MIA70F0044Accident · No injuriesClosedPiper PA-25 · Cleveland, MSNTSB MIA70D0178Accident · No injuriesClosedAero Comdr A-9 · Americus, GANTSB CHI70D0095Accident · No injuriesClosedPiper PA-25 · Suring, WINTSB NYC70D0055Accident · No injuriesClosedBell 47G-5 · Union City, PANTSB MKC70F0198Accident · Serious injuriesClosedBoeing A75N1 · Basehor, KSNTSB LAX70D0033Accident · Minor injuriesClosedPiper PA-25 · Elfrida, AZNTSB MKC70F0106Accident · No injuriesClosedAero Comdr A-9B · Mtn Lake, MNNTSB MIA70D0053Accident · Serious injuriesClosedBell 47G-5 · Hampton, TNNTSB LAX70F0070Accident · No injuriesClosedBell 47G3B1 · Siera Madre, CANTSB FTW70F0184Accident · 1 fatalClosedBoeing B75N1 · Mcallen, TXNTSB FTW70F0083Accident · 2 fatalClosedPiper J3C · Shallowater, TXNTSB SEA70F0049Accident · 1 fatalClosedPitts JC-1 · Tacoma, WANTSB NYC70A0005Accident · 2 fatalClosedPiper PA-18 · Sewell, NJNTSB NYC70A0004Accident · 1 fatalClosedLuscombe 8A · Skaneateles, NYNTSB MKC70F0086Accident · 1 fatalClosedPiper PA-18A · Vermillion, SDNTSB UNK69X0129Accident · No injuriesClosedHughes 369MH · Leh-Kashmir, IndiaNTSB MKC70D0151Accident · No injuriesClosedPiper PA-18 · Crary, NDNTSB MKC70D0097Accident · Minor injuriesClosedCessna 150 · Valley Falls, KSNTSB MKC70D0062Accident · Serious injuriesClosedPiper PA-18 · Hayes Center, NENTSB FTW70F0123Accident · No injuriesClosedBell 47G · Pineland, TXNTSB DIA70F0021Accident · No injuriesClosedHughes 269A · Wadesboro, NCNTSB CHI70F0214Accident · 1 fatalClosedPiper PA-11 · Williamston, MINTSB NYC70A0001Accident · 1 fatalClosedTaylorcraft BF12 · Phillipsburg, NJNTSB FTW70F0080Accident · 1 fatalClosedPiper PA-25 · Plainview, TXNTSB DEN70D0040Accident · No injuriesClosedBell 47G-3B · Casper, WYNTSB MKC70D0066Accident · Minor injuriesClosedPiper PA-18 · Blaisdell, NDNTSB MIA69A0096Accident · 2 fatalClosedPiper J3C-65 · Homestead, FLNTSB MIA70F0180Accident · 1 fatalClosedPiper PA-25 · Waynesboro, GANTSB MIA70F0117Accident · 1 fatalClosedAeronca 7AC · Dacula, GANTSB FTW70F0064Accident · No injuriesClosedBell 47D1 · Richardson, TXNTSB DIA70F0020Accident · Serious injuriesClosedCessna 172 · Greenmountain, NCNTSB CHI70F0192Accident · Serious injuriesClosedCessna 150 · Plymouth, INNTSB MIA70F0033Accident · Serious injuriesClosedCessna 150G · Hialeah, FLNTSB FTW70D0039Accident · No injuriesClosedGrumman G-164 · Danbury, TXNTSB MKC70D0080Accident · Minor injuriesClosedCallair A-9 · Cimarron, KSNTSB FTW70D0110Accident · No injuriesClosedCessna 172 · Taft, TXNTSB MIA70D0099Accident · No injuriesClosedBoeing A75N1 · Donaldsonville, GANTSB FTW70F0042Accident · Serious injuriesClosedPiper PA-25 · Lubbock, TXNTSB FTW70F0022Accident · 1 fatalClosedBell 47D1 · Livingston, LANTSB MIA70F0024Accident · Serious injuriesClosedPiper PA-25 · Rutledge, AL