Section: Performance patterns

Pre-filter rows before applying windows

sql
sql
WITH recent_orders AS (
  SELECT *
  FROM orders
  WHERE order_date >= CURRENT_DATE - INTERVAL '90 days'
)
SELECT customer_id,
       order_date,
       amount,
       ROW_NUMBER() OVER (
         PARTITION BY customer_id
         ORDER BY order_date DESC
       ) AS rn
FROM recent_orders;
Explanation

Filtering early is one of the highest-leverage ways to speed up analytic queries.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Performance patterns
Inspect the plan with EXPLAIN
Start with the actual execution plan.
OpenIn sheetsqlsame section
Create a supporting index for partition/order keys
Help the database read rows in the right order.
OpenIn sheetsqlsame section
Materialize an expensive intermediate result
Break a huge query into smaller stages.
OpenIn sheetsqlsame section
QUALIFY shortcut in some warehouses
Filter window results without wrapping a subquery.
Portable alternative to QUALIFY
Use a subquery or CTE for broad compatibility.
Remember LAST_VALUE frame semantics
Default frames can make LAST_VALUE look broken.