我目前有一个表(帖子),其中包含以下列:
id, stock_code, posted_at
对于给定的股票代码SC和时间T1,我可以在一段时间之后检索最新的帖子,例如
SELECT * FROM post WHERE stock_code = SC AND time > T1 ORDER BY time asc LIMIT 1;
(实际上未经过测试,但你得到了要点)
但是,我希望得到一组多个股票的结果(甚至是表格中每个不同的股票代码)。我可以简单地多次运行此查询,但是很快就会变得效率低下,最好将它组合成一个SQL查询,但是我无法理解如何做到这一点。我希望每一行在给定库存的一定时间后成为最新的帖子,并且每个库存有一行。我该怎么做呢?
P.S。在python端使用Postgres 9.4.8和SqlAlchemy。对SQL只会很满意,但是如果有一些SqlAlchemy魔法可以获得相同的结果,那就太棒了。
答案 0 :(得分:1)
使用distinct on
:
SELECT DISTINCT ON (stock_code) p.*
FROM post p
WHERE p.stock_code = 'SC' AND p.time > T1
ORDER BY p.stock_code, time asc;
显然,使用WHERE
子句,这将返回一行。您可以移除p.stock_code = 'SC'
并按stock_code
获取一行。
答案 1 :(得分:0)
使用union
或union all
将可能查询的结果分组为一个。