Postgres - 使用步骤/分辨率获取两个日期之间的记录

多米尼克·布萨姆拉

我有一个疑问:

SELECT * FROM price_events 
WHERE code='BCI.AX' AND date BETWEEN (now() - interval '1 month') AND now() 
ORDER BY date DESC;

这可能会返回数百行。我想提炼下来说,10 行,均匀分布。做这个的最好方式是什么?

蒂姆·比格莱森

一种方法是使用行号技巧来识别每n一步出现的记录,比如 10 步。我们可以检查行号是否是步长的倍数,如果是,则保留该记录。

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY date DESC) rn
    FROM price_events 
    WHERE code='BCI.AX' AND date BETWEEN (NOW() - INTERVAL '1 month') AND NOW()
)

SELECT *
FROM cte
WHERE rn % ((SELECT COUNT(*) FROM cte) / 10) = 0
ORDER BY date DESC
LIMIT 10;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章