1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| DECLARE @FISRTDATE date
DECLARE @LASTDATE date
SET @LASTDATE = CAST(GETDATE() AS DATE)
SET @FISRTDATE = DATEADD(DAY, -150, @LASTDATE)
WITH cte (CODE_OP , CODE_SERIE, VALEUR)
AS (
SELECT TITRE.CODE_OP , MAS.CODE_SERIE, R_ACTION.VALEUR
FROM R_ACTION
JOIN TITRE
on R_ACTION.CODE_TITRE = TITRE.CODE_TITRE
JOIN DIF as T
on R_ACTION.CODE_DIF = T.CODE_DIF
JOIN CLASSES as C
on T.CODE_CLASSE = C.CODE_CLASSE
JOIN MAS
on C.ID_MAS = MAS.ID_MAS
WHERE R_ACTION.DV_DATE <= @LASTDATE
AND R_ACTION.VALEUR <> 0
AND R_ACTION.DV_DATE >= @FISRTDATE
AND (R_ACTION.CODE_ETAT = 1 OR R_ACTION.CODE_ETAT = 3)
AND R_ACTION.CODE_TYPE_DV = 2
GROUP BY TITRE.CODE_OP, MAS.CODE_SERIE
)
,
tmp AS (
SELECT
CODE_OP, CODE_SERIE, VALEUR,
row_number() over (partition BY CODE_OP, CODE_SERIE ORDER BY VALEUR) AS rn,
count(*) over (partition BY CODE_OP, CODE_SERIE) AS ct
FROM cte
)
SELECT CODE_OP, CODE_SERIE, avg(VALEUR) AS mediane
FROM tmp
WHERE rn BETWEEN ct/2 + ct%2 AND ct/2 + 1
GROUP BY CODE_OP, CODE_SERIE |
Partager