Final NTSB investigations, ND
340 cases where the phase of flight was Landing.
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.\"eventStateOrRegion\" = 'ND' AND c.\"eventCountry\" = 'USA'
AND c.\"completionStatus\" = 'Completed'
AND c.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 550)
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."eventStateOrRegion" = 'ND' AND c."eventCountry" = 'USA'
AND c."completionStatus" = 'Completed'
AND c."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 550)
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 DEN82DA170Accident · Minor injuriesFinal reportMooney M-20F · Arthur, NDThe pilot landed long and fast. The aircraft collided with an elevated roadbed, shearing off the landing gear.NTSB DEN82DA097Accident · No injuriesFinal reportCessna 152 · Grand Forks, NDDuring landing, the student pilot bounced and then touched down hard. The nose gear failed and the firewall and propeller were damaged. The fixed base operator reported light turbulence.NTSB DEN82DA079Accident · No injuriesFinal reportCessna 402A · Bismarck, NDThe pilot discovered that the gear would not extend electrically. Manual extension was attempted, but the crank would not turn in either direction. While applying pressure to the cranks, the chain drive failed. The plane was landed with the gear retracted.…NTSB DEN82DA066Accident · No injuriesFinal reportCessna 182P · Enderlin, NDDuring a landing on runway 13, the aircraft veered off the runway after touchdown, then went into a freshly plowed field and nosed over. The pilot estimated that the wind was from 200 degrees at 20 gusting 25 knots. There was a 2640 ft turf runway (04/22) on…NTSB DEN82DA059Accident · Minor injuriesFinal reportCessna 170A · Williston, NDThe pilot noted unfavorable winds when he arrived for landing. He elected to fly in the local area until the winds subsided. After flying locally for about one hour, he elected to land on runway 29 with a crosswind from 020 degrees. While on downwind, he…NTSB DEN82DA058Accident · No injuriesFinal reportMooney M20F · Crosby, NDThe pilot reported that the runway had a 6 to 7 ft snowbank on the left side of the runway and a 2 to 3 ft snowbank on the right side. Also, water was on the runway intermittently along the entire length. After landing, the plane started hydroplaning. As the…NTSB DEN82DA047Accident · No injuriesFinal reportTaylorcraft BC-12D · Lisbon, NDThe pilot stated that during the landing on runway 15, at an altitude of approximately 20 to 30 feet, the wind coming over the snowbanks on the sides of the runway caused turbulence that raised the aircraft and pushed it to the left of the runway. The…NTSB DEN82FTG02Accident · No injuriesClosedMitsubishi MU-2B · Williston, NDNTSB DEN81FTG19Accident · No injuriesClosedMooney M20J · Mapleton, NDNTSB DEN81FA038Accident · 2 fatalClosedCessna 182 · Mandaree, NDNTSB DEN81DTG09Accident · No injuriesClosedCessna 172RG · Harvey, NDNTSB DEN81DTG07Accident · No injuriesClosedPiper PA-22 · Oberon, NDNTSB DEN81DTG06Accident · No injuriesClosedCessna 182G · Alama, NDNTSB DEN81FTG04Accident · Minor injuriesClosedBellanca 7ECA · Grand Forks, NDNTSB DEN81DTG02Accident · Minor injuriesClosedCessna A185F · Minot, NDNTSB DEN80FTG13Accident · No injuriesClosedCessna 310 · Pembina, NDNTSB DEN80FTG10Accident · No injuriesClosedDehavilland DHC-3 · Noonan, NDNTSB MKC80FTG08Accident · No injuriesClosedCessna 170B · Grand Forks, NDNTSB MKC80FTG07Accident · No injuriesClosedCessna 182RG · Minot, NDNTSB MKC80DTG05Accident · No injuriesClosedPiper PA-24 · Grand Forks, NDNTSB MKC80FTG03Accident · No injuriesClosedCessna 172 · Grand Forks, NDNTSB MKC80DTG04Accident · No injuriesClosedCessna 177B · Rolette, NDNTSB MKC79FTG13Accident · No injuriesClosedBeech V35 · Bismarck, NDNTSB MKC79DTG10Accident · No injuriesClosedSwearingen SA26AT · Minot, NDNTSB MKC79DTG05Accident · No injuriesClosedPiper PA-28 · Pingree, NDNTSB MKC79IA002Incident · No injuriesClosedBeech B100 · Dickinson, NDNTSB MKC78DTG14Accident · No injuriesClosedPiper PA-12 · Rugby, NDNTSB MKC78FTG03Accident · No injuriesClosedCessna 150K · Cavalier, NDNTSB MKC78DTG02Accident · No injuriesClosedCessna R172K · Dickinson, NDNTSB MKC77FA038Accident · 1 fatalClosedPiper PA-18 · Jamestown, NDNTSB MKC77FTG09Accident · No injuriesClosedCessna 182G · West Fargo, NDNTSB MKC77DTG08Accident · No injuriesClosedPiper J-3 · Kenmare, NDNTSB MKC77FTG06Accident · No injuriesClosedCessna 305A · Minot, NDNTSB MKC77FTG04Accident · No injuriesClosedCessna 185 · Bismarck, NDNTSB MKC76FTG27Accident · No injuriesClosedPiper PA-28 · Maddock, NDNTSB MKC76FTG23Accident · No injuriesClosedCessna T210G · Flasher, NDNTSB MKC76FTG18Accident · No injuriesClosedCessna 207 · Fargo, NDNTSB MKC76DTG16Accident · No injuriesClosedPiper PA-18 · Crosby, NDNTSB MKC76DTG15Accident · No injuriesClosedBellanca 8GCBC · New Leipzig, NDNTSB MKC76DTG13Accident · No injuriesClosedPiper PA-18 · Napoleon, NDNTSB MKC76DTG11Accident · No injuriesClosedBellanca 8KCAB · Minot, NDNTSB MKC76DTG10Accident · No injuriesClosedCessna 170 · Warsaw, NDNTSB MKC76DTG09Accident · Minor injuriesClosedCessna 150 · Kulm, NDNTSB MKC76DTG06Accident · No injuriesClosedPiper PA-18 · Crosby, NDNTSB MKC75FTG27Accident · No injuriesClosedPiper PA-22 · Fargo, NDNTSB MKC75FTG15Accident · No injuriesClosedCessna 150 · Devils Lake, NDNTSB MKC75FTG14Accident · No injuriesClosedPitts S1C · Erie, NDNTSB MKC75DTG07Accident · No injuriesClosedInterstate S-1B1 · Williston, NDNTSB MKC75DTG08Accident · No injuriesClosedCessna 172 · Fordville, NDNTSB MKC74FTG17Accident · No injuriesClosedBeech B55 · Minot, ND