当前位置: 首页 > 面试题库 >

SQL:每天选择最接近特定时间的一条记录

孙池暝
2023-03-14
问题内容

我有一个表,用于存储带有时间点的值:

CREATE TABLE values
(
    value DECIMAL,
    datetime DATETIME 
)

每天可能有很多值,一天中也可能只有一个值。现在,我想获取最接近给定时间的给定时间范围(例如一个月)中每一天的值。我只想每天获得一个值(如果有当天的记录),或者没有值(如果没有记录)。我的数据库是PostgreSQL。我对此很坚持。我可以获取时间跨度中的所有值,并以编程方式为每天选择最接近的值,但这将意味着从数据库中提取大量数据,因为一天中可能有很多值。

(更新)

简单地说:我有任意精度的数据(可能是一分钟,可能是两个小时或两天),我想将其转换为一天的固定精度,一天中的特定时间。

(第二次更新)

假设所需时间为16:00,这是从接受的答案中进行正确的Postgresql类型转换的查询:

SELECT datetime, value FROM values, (
  SELECT DATE(datetime) AS date, MIN(ABS(EXTRACT(EPOCH FROM TIME '16:00' - CAST(datetime AS TIME)))) AS timediff
  FROM values
  GROUP BY DATE(datetime)
  ) AS besttimes
WHERE 
CAST(values.datetime AS TIME) BETWEEN TIME '16:00' - CAST(besttimes.timediff::text || ' seconds' AS INTERVAL)
                                AND TIME '16:00' + CAST(besttimes.timediff::text || ' seconds' AS INTERVAL) 
                                AND DATE(values.datetime) = besttimes.date

问题答案:

朝这个方向怎么样?

SELECT values.value, values.datetime
FROM values,
( SELECT DATE(datetime) AS date, MIN(ABS(_WANTED_TIME_ - TIME(datetime))) AS timediff
  FROM values
  GROUP BY DATE(datetime)
) AS besttimes
WHERE TIME(values.datetime) BETWEEN _WANTED_TIME_ - besttimes.timediff
                                AND _WANTED_TIME_ + besttimes.timediff
AND DATE(values.datetime) = besttimes.date

我不确定日期/时间提取和abs(time)函数,因此您可能必须替换它们。



 类似资料:
  • 问题内容: 我有一张桌子,如下所示: 请注意,MyDate格式为YYMMDD,而MyTime为24小时格式。 我想用最新的MyDate和MyTime返回唯一的MyKey的结果。预期的结果将是这样的: 任何帮助都感激不尽。谢谢。 问题答案: 首先,将日期和时间列合并为日期时间,以便轻松订购它们。自从我使用Sql Server以来已经有一段时间了,但是row_number()函数和分区是一种查找由另一

  • 我想要做的是在第三分钟提取“最近”的关键帧--因为通常情况下,我用当前成功的代码提取的帧不是关键帧,因此模糊。 我知道有一种方法可以提取FFMPEG中的所有关键帧,但是有没有一种方法可以提取视频中最接近特定时间的关键帧呢?

  • 问题内容: 我想从中选择记录,但是,每天都有很多价值,因为它们每15分钟保存一个值,所以我只希望每天有第一个或最后一个值。 表架构: 错误的SQL: 如果可能的话,我想一口气… 非常感谢。 编辑: 我的意思是,我每天都有一个查询,但是我只想从c中进行单个查询 EDIT2: 我有 64,260 条记录,执行和响应该查询需要很长时间,有时还会超时。 问题答案: 要获得每个日期的第一个条目,您可以做

  • 问题内容: 我有一个包含ID,WorkerID,IsActive标志(1或0)和LocalTime的表。每次工作人员处于活动状态或不活动状态时,都会使用WorkerID,1或0标志记录以及一个时间(LocalTime)创建一条记录。 我想插入一个新表中:从该表中,对于每个唯一的WorkerID,仅当该记录的IsActive标志为1时,才为该唯一的WorkerID选择具有最新LocalTime的记录

  • 问题内容: 假设我有一个客户表和一个采购表。每次购买都属于一个客户。我想在一份SELECT声明中列出所有客户以及他们最近一次购买的清单。最佳做法是什么?关于建立索引有什么建议吗? 请在您的答案中使用这些表/列的名称: customer: purchase: 并且在更复杂的情况下,通过将最后一次购买放入客户表中来对数据库进行非规范化(在性能方面)是否有益? 如果id保证按日期将(购买)排序,可以使用

  • 问题内容: 我有一个具有“约会表”和“服务表”的数据库。每个appt都有一个服务,每个服务都有一个价格。我想要的是一个查询,该查询将始终返回12行(每月一行),并包含几个月的总和(基于其服务ID)。到目前为止,我有: 当前,返回的内容如下: 问题是,如果一个月没有任何订单,我不会在查询中返回该月。我希望该月有一个记录,只是它的“ monthly_total”等于零。 以下是我希望查询返回的内容: