Не знаю почему у вас не работает!?
percentile_disc нормально работает непосредственно с
datetime :
SELECT
dt,
DATEADD(MILLISECOND, pctcont_90_dt % 1000, DATEADD(SECOND, pctcont_90_dt / 1000, '19700101')) AS pctcont_90_dt,
pctdisc_90_dt
FROM (
SELECT
dt,
CAST(
percentile_cont(.90)
WITHIN GROUP (ORDER BY (datediff_big(MS, '1970-01-01', dt)))
OVER()
AS BIGINT
)
AS pctcont_90_dt,
percentile_disc(.90)
WITHIN GROUP (ORDER BY dt) over()
AS pctdisc_90_dt
FROM test
) t
;
см. пример на
dbfiddle
см. также
percentile_disc vs percentile_cont