选择具有日期时间的 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;

这是使用dense_rank()窗口/分析函数。 这将枚举时间值,并赋予相同的排名值。 where子句只是选择您想要的数量。

我不确定SQL炼金术部分,但就SQL查询而言,我将分两步完成:

  1. 获取时间。 例如,类似的东西。

    SELECT DISTINCT valid_time FROM MyTable LIMIT 3 ORDER BY valid_time DESC;

  2. 获取具有这些时间的行,使用上一步作为子查询:

    SELECT * FROM MyTable WHERE valid_time IN (SELECT DISTINCT valid_time FROM MyTable LIMIT 3 ORDER BY valid_time DESC);

最新更新