Chybou při prvním pokusu je, že nemůžete kombinovat agregační funkci count(*)
s un-agregated výběr řádků. Můžete to opravit pomocí count()
jako window-aggregate function místo toho:
SELECT * FROM (
SELECT *, ((row_number() OVER (ORDER BY "time"))
% ceil(count(*) OVER () / 500.0)::int) AS rn
FROM data_raw
) sub
WHERE sub.rn = 0;
Podrobné vysvětlení zde:
@Alexander má opravu pro váš poslední pokus.