0

我有一个 postgres 数据库,其中大多数表都有一个“valid_time”列,表示该行中的数据打算表示的时间和一个“analysis_time”列,表示进行估计的时间(这可能是相同的或稍后的)时间比测量情况下的有效时间或预测情况下的更早时间)。通常每个有效时间都有多个分析时间,对应于不同的测量(如果稍等一下,给定时间有更多数据可用,因此分析更好,但测量不太及时)和不同提前期的预测。

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

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

我是关系数据库的新手。从某种意义上说,这个问题有两个部分;如何在裸 SQL 中实现这一点,然后如何将其转换为 SQLalchemy ORM?

4

2 回答 2

2

这是您问题第一部分的解决方案。. . 如何在 SQL 中执行此操作:

select t.*
from (select t.*,
             dense_rank() over (order by validtime desc) as seqnum
      from t
     ) t
where seqnum <= N;

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

于 2013-09-16T00:17:05.513 回答
1

我不确定 SQLalchemy 部分,但就 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);

于 2013-09-16T00:17:15.380 回答