SQL

دامِ قاب پیش‌فرض توی FIRST_VALUE / LAST_VALUE

اگه قاب پیش‌فرض (تا CURRENT ROW) رو عوض نکنی، LAST_VALUE همون ردیف جاری رو برمی‌گردونه. راه‌حلش اینه: قاب رو تا UNBOUNDED FOLLOWING گسترش بدی.

کاربرد

گرفتن اولین و آخرین وضعیت یه اشتراک روی هر ردیف از تاریخچه.

پیش‌نیازها

PostgreSQL, SQL Server, MySQL 8+, Oracle

SQL
SELECT
    user_id,
    plan,
    changed_at,
    FIRST_VALUE(plan) OVER w AS first_plan,
    -- Piège : sans cadre explicite, LAST_VALUE = ligne courante
    LAST_VALUE(plan) OVER (
        PARTITION BY user_id ORDER BY changed_at
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS current_plan
FROM subscription_history
WINDOW w AS (PARTITION BY user_id ORDER BY changed_at);

نتیجه

 user_id |   plan   | changed_at | first_plan | current_plan
---------+----------+------------+------------+--------------
      42 | free     | 2025-11-02 | free       | business
      42 | pro      | 2026-01-15 | free       | business
      42 | business | 2026-04-20 | free       | business
      57 | pro      | 2026-02-01 | pro        | free
      57 | free     | 2026-05-12 | pro        | free
(5 rows)
SQLFIRST_VALUELAST_VALUEWindow frame

اسنیپت‌های مرتبط

بازگشت به آزمایشگاه داده