Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择具有datetime的N个最新唯一值的行_Python_Sql_Postgresql_Sqlalchemy - Fatal编程技术网

Python 选择具有datetime的N个最新唯一值的行

Python 选择具有datetime的N个最新唯一值的行,python,sql,postgresql,sqlalchemy,Python,Sql,Postgresql,Sqlalchemy,我有一个postgres DB,其中大多数表都有一个列“valid_time”,指示该行中的数据打算何时表示,还有一个列“analysis_time”,指示何时进行估计,如果是测量,这可能是与有效时间相同或更晚的时间,如果是预测,则可能是更早的时间。通常,每个有效时间都有多个分析时间,对应于不同的度量。如果您稍等一点,则给定时间内有更多数据可用,因此分析效果更好,但度量不太及时,并使用不同的提前期进行预测 我使用SQLalchemy在Python中访问这个数据库 我想做的是能够提取指定列最近N个

我有一个postgres DB,其中大多数表都有一个列“valid_time”,指示该行中的数据打算何时表示,还有一个列“analysis_time”,指示何时进行估计,如果是测量,这可能是与有效时间相同或更晚的时间,如果是预测,则可能是更早的时间。通常,每个有效时间都有多个分析时间,对应于不同的度量。如果您稍等一点,则给定时间内有更多数据可用,因此分析效果更好,但度量不太及时,并使用不同的提前期进行预测

我使用SQLalchemy在Python中访问这个数据库

我想做的是能够提取指定列最近N个唯一日期时间的所有行。例如,我可能需要3个最近的唯一有效时间,但这通常会超过3行,因为这3个有效时间中的每一个都有多个分析时间


我不熟悉关系数据库。从某种意义上讲,这个问题有两个部分;如何在裸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时间