2016-10-25 86 views
0

合并成一个单一查询我目前有以下各列的表(后):如何多单结果的查询与多个结果

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

回答

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获得一行。

+0

完美,这是一个比我想象的更简单的解决方案。非常感谢您的帮助 – Lobe

0

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