NTSB investigations
20,996 cases where the phase of flight was Approach.
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 = 500)
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 = 500)
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 MKC73DCQ07Accident · No injuriesClosedPiper J4A · Beaumont, KSNTSB UNK72X0112Accident · 3 fatalClosedCessna 170 · Iron Crk, CanadaNTSB SEA73DYG06Accident · No injuriesClosedConvair PB4Y-2 · Wenatchee, WANTSB NYC73FNC15Accident · No injuriesClosedPiper PA-30 · Manchester, NHNTSB FTW73IF005Incident · No injuriesClosedBoeing 727 · New Orleans, LANTSB OAK73FVG05Accident · Minor injuriesClosedLuscombe 8A · Oroville, CANTSB NYC73DKM01Accident · No injuriesClosedPiper PA-28 · Lenoir, NCNTSB CHI73DET03Accident · No injuriesClosedBeech 23 · Crown Point, INNTSB ANC73AA008Accident · No injuriesClosedDehavilland DHC-2 · Juneau, AKNTSB MIA73FLA08Accident · No injuriesClosedCessna 150L · Jacksonville, FLNTSB FTW73AF004Accident · 1 fatalClosedDehavilland DH82A · Jenks, OKNTSB OAK73FVA10Accident · Serious injuriesClosedCessna 150G · Fresno, CANTSB MIA73DKG06Accident · No injuriesClosedCessna 150 · Butler, GANTSB OAK73DXQ03Accident · No injuriesClosedBolkow C · Lee Vining, CANTSB OAK73DJY06Accident · 1 fatalClosedCessna 172 · Savannakhet, LaosNTSB NYC73DNC13Accident · No injuriesClosedPiper PA-28 · Monticello, MENTSB LAX73FUG03Accident · Minor injuriesClosedPiper PA-24 · Hesperia, CANTSB NYC73AN011Accident · 2 fatalClosedAeronca 7AC · Culpeper, VANTSB NYC72DFJ02Accident · No injuriesClosedCessna 337C · Buffalo, NYNTSB CHI73FEE08Accident · No injuriesClosedPitts Spcl SC-1 · Aurora, ILNTSB OAK73FVD06Accident · Serious injuriesClosedCessna 150 · San Leandro, CANTSB NYC73DHA02Accident · No injuriesClosedSchweizer 233A · Erwinna, PANTSB MKC73AK009Accident · 1 fatalClosedCessna 150J · Caldwell, KSNTSB MIA73FKT05Accident · Minor injuriesClosedCessna 182 · Homestead, FLNTSB FTW73FRG02Accident · No injuriesClosedMiniplane DSA · San Antonio, TXNTSB OAK73FVD03Accident · Minor injuriesClosedStinson 108-2 · Concord, CANTSB NYC73FNE03Accident · Minor injuriesClosedCessna 172E · Sterling, MANTSB MIA73DLT01Accident · Serious injuriesClosedCessna 150 · Milan, TNNTSB FTW73DQG05Accident · Serious injuriesClosedErco 415-C · Canyon, TXNTSB OAK73FVD02Accident · Serious injuriesClosedPiper PA-28 · Hayward, CANTSB NYC73FHA01Accident · No injuriesClosedChampion 7GCAA · Kutztown, PANTSB ANC73AA005Accident · Serious injuriesClosedBell 47G3B1 · Fairbanks, AKNTSB NYC73FLJ02Accident · Minor injuriesClosedCessna 170B · Scotland Neck, NCNTSB NYC73AN008Accident · 2 fatalClosedBeech G35 · Wellsville, NYNTSB SEA73FYE02Accident · Serious injuriesClosedCessna 182 · Bellevue, WANTSB OAK72DVA05Accident · No injuriesClosedMaule M-4 · Lone Pine, CANTSB MKC73FCQ03Accident · Serious injuriesClosedTaylorcraft BC12-D · Minneola, KSNTSB MKC73DCD01Accident · No injuriesClosedCessna 172H · Cresco, IANTSB CHI73FEE04Accident · No injuriesClosedPiper PA-28 · Lansing, ILNTSB NYC73FNA01Accident · No injuriesClosedCessna 182B · Concord, MANTSB NYC73DIG02Accident · No injuriesClosedPiper PA-28 · Churchville, MDNTSB FTW73FPA02Accident · No injuriesClosedSchweizer SGS233 · Rockwell, TXNTSB CHI73FEE01Accident · No injuriesClosedCessna 140 · Harvard, ILNTSB CHI73AC001Accident · 1 fatalClosedCessna 421B · Pataskala, OHNTSB MKC73DTG01Accident · No injuriesClosedPiper PA-18 · Minot, NDNTSB NYC73FLJ01Accident · Serious injuriesClosedWoods Windy TOO · Holly Springs, NCNTSB NYC73FHJ02Accident · Serious injuriesClosedDehavilland DH82A · Amityville, NYNTSB NYC73FHJ01Accident · Minor injuriesClosedCessna 172 · Ronkonkoma, NYNTSB MIA73FLA01Accident · No injuriesClosedCessna 175R · Tallahassee, FLNTSB MIA73DKG02Accident · Minor injuriesClosedPiper J-3 · Kathleen, GA