Python 选择具有datetime的N个最新唯一值的行
我有一个postgres DB,其中大多数表都有一个列“valid_time”,指示该行中的数据打算何时表示,还有一个列“analysis_time”,指示何时进行估计,如果是测量,这可能是与有效时间相同或更晚的时间,如果是预测,则可能是更早的时间。通常,每个有效时间都有多个分析时间,对应于不同的度量。如果您稍等一点,则给定时间内有更多数据可用,因此分析效果更好,但度量不太及时,并使用不同的提前期进行预测 我使用SQLalchemy在Python中访问这个数据库 我想做的是能够提取指定列最近N个唯一日期时间的所有行。例如,我可能需要3个最近的唯一有效时间,但这通常会超过3行,因为这3个有效时间中的每一个都有多个分析时间Python 选择具有datetime的N个最新唯一值的行,python,sql,postgresql,sqlalchemy,Python,Sql,Postgresql,Sqlalchemy,我有一个postgres DB,其中大多数表都有一个列“valid_time”,指示该行中的数据打算何时表示,还有一个列“analysis_time”,指示何时进行估计,如果是测量,这可能是与有效时间相同或更晚的时间,如果是预测,则可能是更早的时间。通常,每个有效时间都有多个分析时间,对应于不同的度量。如果您稍等一点,则给定时间内有更多数据可用,因此分析效果更好,但度量不太及时,并使用不同的提前期进行预测 我使用SQLalchemy在Python中访问这个数据库 我想做的是能够提取指定列最近N个
我不熟悉关系数据库。从某种意义上讲,这个问题有两个部分;如何在裸SQL中实现这一点,然后如何将其转换为SQLalchemy ORM?以下是问题第一部分的解决方案。如何在SQL中执行此操作:
select t.*
from (select t.*,
dense_rank() over (order by validtime desc) as seqnum
from t
) t
where seqnum <= N;
这是使用密集秩窗口/分析函数。这将枚举时间值,并指定相同的秩值。where子句只是选择您想要的数量。以下是问题第一部分的解决方案。如何在SQL中执行此操作:
select t.*
from (select t.*,
dense_rank() over (order by validtime desc) as seqnum
from t
) t
where seqnum <= N;
这是使用密集秩窗口/分析函数。这将枚举时间值,并指定相同的秩值。where子句只选择您想要的数量。我不确定SQLalchemy部分,但就SQL查询而言,我将分两步完成: 了解时代。例如,类似于 按有效时间描述从MyTable LIMIT 3顺序中选择不同的有效时间 使用上一步作为子查询,获取具有这些时间的行: 从MyTable中选择*其中有效\u时间按有效\u时间描述从MyTable LIMIT 3顺序选择不同的有效\u时间
我不确定SQLalchemy部分,但就SQL查询而言,我将分两步完成: 了解时代。例如,类似于 按有效时间描述从MyTable LIMIT 3顺序中选择不同的有效时间 使用上一步作为子查询,获取具有这些时间的行: 从MyTable中选择*其中有效\u时间按有效\u时间描述从MyTable LIMIT 3顺序选择不同的有效\u时间