【发布时间】:2021-01-17 16:27:49
【问题描述】:
我有一个查询,我试图根据日期选择最近的行。所以我希望我的查询做的是为我的数据库中的几列选择最新的数据点。
sql = f"""SELECT DISTINCT ON (id), cast(marketcap as money), cast(week52high as money), cast(week52low as money)
, to_char(dividend_yield * 100, '99D99%%')
, pe_ratio, ROUND(beta,2)
FROM security_stats
WHERE security_stats.id IN ({placeholders});
"""
对于任何想知道的人,placeholders 只是用户给出的股票列表。
此应用程序的目标是检索财务数据点的最新观察结果。我的查询工作正常,但是当我只想要每只股票的最新行时,它会选择每只股票的所有行。
如何编辑我的查询以解决上述问题?我尝试了一些使用MAX 和LIMIT 的方法,但无法正常工作!
编辑:
请注意,使用的列是 id 和 date。这些应该是不同的,并且日期应该是最近的观察。
感谢@GME,使用下面的这个方法让它工作。也特别感谢@Somy 也向我展示了另一种方法!
sql = f"""SELECT DISTINCT ON (id) id, cast(marketcap as money), cast(week52high as money), cast(week52low as money)
, to_char(dividend_yield * 100, '99D99%%')
, pe_ratio, ROUND(beta,2)
FROM security_stats
WHERE security_stats.id IN ({placeholders}) ORDER BY id, date desc ;
"""
【问题讨论】:
-
哪一列存储stock?哪一个定义了最近的行?
-
完全忘了补充,太傻了。我使用
id列作为股票名称,使用date列作为日期。我更新了我的 OG 帖子以反映我使用底部建议的新尝试
标签: python sql postgresql sql-order-by greatest-n-per-group