Efter en händelsefattig förstaperiod, där Tre Kronor vann skotten med 4–3, skruvades tempot upp i den andra perioden.
Filip Forsberg spräckte dödläget efter 26.36, men några minuter senare kvitterade Lettland efter att Adrian Kempes klubba gått sönder i offensiv zon.
Letterna var disciplinerade och höll sig utanför utvisningsbåset, medan Tre Kronor fick spela många minuter i numerärt underläge. Bland annat 1.54 i spel tre mot fem vid ställningen 1–1.
Tre Kronor hade problem
Sverige var illa ute inför den tredje perioden, men såg piggare ut efter pausvilan. Tidigt i slutperioden skickade Mattias Ekholm en puck mot mål som Nashville-kollegan Viktor Arvidsson snyggt stötte in på volley till 2–1.
Oliver Ekman-Larsson lyfte sedan in 3–1 efter en kaotisk situation framför målvakten Elvis Merzļikins där Adrian Kempe snappat upp den lösa pucken.
Det blev onödigt spännande mot slutet efter att Rūdolfs Balcers reducerat till 2–3 med ett aningen billigt skott utifrån. Letterna pressade på för en kvittering in i det sista, men resultatet stod sig tiden ut.
Nu ställs Tre Kronor mot USA i semifinalen på lördag. Amerikanerna vann sin kvartsfinal tidigare i dag med 3–2 mot Tjeckien.