Advertisement
Guest User

desired_rank

a guest
Mar 19th, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.23 KB | None | 0 0
  1. WITH datasource (id, date, status) AS (
  2.   SELECT
  3.     1,
  4.     '2024-01-15',
  5.     'a'
  6.   UNION ALL
  7.   SELECT
  8.     1,
  9.     '2024-01-16',
  10.     'g'
  11.   UNION ALL
  12.   SELECT
  13.     1,
  14.     '2024-01-17',
  15.     'e'
  16.   UNION ALL
  17.   SELECT
  18.     1,
  19.     '2024-01-18',
  20.     'done'
  21.   UNION ALL
  22.   SELECT
  23.     1,
  24.     '2024-01-19',
  25.     'f'
  26.   UNION ALL
  27.   SELECT
  28.     1,
  29.     '2024-01-20',
  30.     'r'
  31. ),
  32. rownumbers AS (
  33.   SELECT
  34.     id,
  35.     date,
  36.     status,
  37.     Row_number() OVER (
  38.       partition BY id
  39.       ORDER BY
  40.         date
  41.     ) AS rn
  42.   FROM
  43.     datasource
  44. ),
  45. withnewpartitionkey AS (
  46.   SELECT
  47.     r1.id,
  48.     r1.date,
  49.     r1.status,
  50.     r1.rn AS rn,
  51.     r2.rn AS rn_done,
  52.     CASE WHEN (
  53.       r1.rn - COALESCE(r2.rn, 0)
  54.     ) > 0 THEN 1 WHEN (
  55.       r1.rn - COALESCE(r2.rn, 0)
  56.     ) < 0 THEN -1 ELSE 0 END AS np_key
  57.   FROM
  58.     rownumbers r1
  59.     LEFT JOIN (
  60.       SELECT
  61.         id,
  62.         rn
  63.       FROM
  64.         rownumbers
  65.       WHERE
  66.         status = "done"
  67.     ) r2 ON r1.id = r2.id
  68. )
  69. SELECT
  70.   id,
  71.   date,
  72.   status,
  73.   Rank() OVER (
  74.     partition BY id,
  75.     np_key
  76.     ORDER BY
  77.       id,
  78.       date
  79.   ) AS desired_rank
  80. FROM
  81.   withnewpartitionkey
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement