如何将多个单个结果查询合并到一个包含多个结果的查询中

时间:2016-10-25 11:55:47

标签: sql postgresql sqlalchemy

我目前有一个表(帖子),其中包含以下列:

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魔法可以获得相同的结果,那就太棒了。

2 个答案:

答案 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)

使用unionunion all将可能查询的结果分组为一个。