Skip to content

Instantly share code, notes, and snippets.

@hrbrmstr
Created October 18, 2018 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hrbrmstr/99d34ac456e25e46df23dd74fdee4d84 to your computer and use it in GitHub Desktop.
Save hrbrmstr/99d34ac456e25e46df23dd74fdee4d84 to your computer and use it in GitHub Desktop.
;
WITH CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY [product_id], shop_code
ORDER BY
[doc_date]) - ROW_NUMBER() OVER (PARTITION BY [product_id], shop_code, mark_1
ORDER BY
[doc_date]) AS grp
FROM
ao
)
,
CTE1 AS
(
SELECT
*
FROM
CTE c OUTER APPLY (
SELECT
TOP 1 grp AS prvgrp
FROM
CTE
WHERE
mark_1 = 0
AND doc_date <= c.doc_date
AND [product_id] = c.[product_id]
AND shop_code = c.shop_code
ORDER BY
doc_date DESC ) prev OUTER APPLY (
SELECT
TOP 1 grp AS nxtgrp
FROM
CTE
WHERE
mark_1 = 0
AND [product_id] = c.[product_id]
AND shop_code = c.shop_code
AND doc_date >= c.doc_date
ORDER BY
doc_date) nxt
)
SELECT
c.product_id,
c.shop_code,
c.doc_date,
c.ship_count,
c.mark_1,
CASE
WHEN
med < ship_count
THEN
med
WHEN
ship_count < 0
THEN
0
ELSE
ship_count
END
AS OUTPUT, c.ship_count -
CASE
WHEN
med < ship_count
THEN
med
WHEN
ship_count < 0
THEN
0
ELSE
ship_count
END
AS output1 INTO test2
FROM
CTE1 c OUTER APPLY (
SELECT
MAX(med) AS med
FROM
(
SELECT
PERCENTILE_DISC(0.5) WITHIN GROUP(
ORDER BY
CASE
WHEN
ship_count <= 0
THEN
0
ELSE
ship_count
END
) OVER (PARTITION BY [product_id], shop_code, grp) AS med
FROM
CTE
WHERE
grp IN
(
nxtgrp, prvgrp
)
AND [product_id] = c.[product_id]
AND shop_code = c.shop_code
)
r)c2
ORDER BY
doc_date
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment