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

如何在Oracle SQL中获取最接近的日期

钱季
2023-03-14
问题内容

例如,我有2个时间表:T1

id time
1 18:12:02
2 18:46:57
3 17:49:44
4 12:19:24
5 11:00:01
6 17:12:45

和T2

id time
1 18:13:02
2 17:46:57

我需要从T1获取最接近T2的时间。这些表之间没有关系。应该是这样的:

select T1.calldatetime
from T1, T2 
where T1.calldatetime between 
T2.calldatetime-(
    select MIN(ABS(T2.calldatetime-T1.calldatetime))
    from T2, T1)
and
T2.calldatetime+(
    select MIN(ABS(T2.calldatetime-T1.calldatetime))
    from T2, T1)

但是我不明白。有什么建议?


问题答案:

我相信这是您要查找的查询:

CREATE TABLE t1(id INTEGER, time DATE);
CREATE TABLE t2(id INTEGER, time DATE);

INSERT INTO t1 VALUES (1, TO_DATE ('18:12:02', 'HH24:MI:SS'));
INSERT INTO t1 VALUES (2, TO_DATE ('18:46:57', 'HH24:MI:SS'));
INSERT INTO t1 VALUES (3, TO_DATE ('17:49:44', 'HH24:MI:SS'));
INSERT INTO t1 VALUES (4, TO_DATE ('12:19:24', 'HH24:MI:SS'));
INSERT INTO t1 VALUES (5, TO_DATE ('11:00:01', 'HH24:MI:SS'));
INSERT INTO t1 VALUES (6, TO_DATE ('17:12:45', 'HH24:MI:SS'));

INSERT INTO t2 VALUES (1, TO_DATE ('18:13:02', 'HH24:MI:SS'));
INSERT INTO t2 VALUES (2, TO_DATE ('17:46:57', 'HH24:MI:SS'));

SELECT t1.*, t2.*
  FROM t1, t2,
       (  SELECT t2.id, MIN (ABS (t2.time - t1.time)) diff
            FROM t1, t2
        GROUP BY t2.id) b
 WHERE ABS (t2.time - t1.time) = b.diff;

确保时间列具有相同的日期部分,否则t2.time-t1.time部分将无法正常工作。

编辑 :感谢您的接受,但本的下面的答案是更好。它使用Oracle分析功能,性能会更好。



 类似资料:
  • 问题内容: 给定此基准日期: 我想在列表中找到一个包含最接近日期的元组,但是它不能是更早的日期。 所以这里的输出应该是(它不能是第三个元组,因为那里的日期早于基准日期) 我的问题是,是否存在用于此类日期比较的任何模块?我试图先将所有数据更改为格式,然后进行比较,但是我的代码变得很丑陋,而且切片很多。 @编辑: 要测试的大清单: 要测试的大清单: 问题答案: 将日期转换为datetime对象,所以现

  • 我有两个日期字段: 开始日期和结束日期和临时日期。 我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间? 在示例记录中,我需要获得第二条记录,因为与临时日期相近。实例

  • 问题内容: 我需要从MySQL表中获取与当前日期最接近的日期。 这是我的桌子: 因此,如果查询今天运行,它将返回 任何帮助深表感谢。谢谢 问题答案:

  • 问题内容: 这篇文章几乎为我回答了这个问题,但是我有特定的需求,没有找到我想要的东西。这就是我的经验。我无法完全绕开它,所以我真正需要的只是指向正确方向的一个点。 假设我有一个如下数组: 我想有一种方法来提供日期(例如“ 2013-02-04 14:11:16”),并有一个函数确定数组中与此日期最接近的匹配项(即为“ 2013-02” -0516:25:07“)。 我将不胜感激任何提示。谢谢!:)

  • 问题内容: 我在Postgres 9.3数据库中有一个方案,在该方案中,我必须获取出售书籍的最近10个日期。考虑以下示例: table中目前没有任何限制,但是我们有一项服务,每天只插入一个计数。 我必须获得基于的结果。当我传递ID时,应使用书名,出售日期和出售份数生成报告。 所需的输出: 问题答案: 这看起来并不令人怀疑,但这 是个难题 。 假设条件 你的数目是。 表格中的所有列均已定义。 该表在

  • 我有一个有说服力的事件模型,它与以下多个日期相关: 之后,我需要选择唯一的日期,最接近当前时间的日期。我知道如何使用原始SQL查询或DB类来实现这一点。但是没有更好的解决办法吗?我不想跳进数据库获取数据,我已经有了。 在雄辩的模型中,日期格式是令人惊讶的字符串。