【问题标题】:select value from date before 9am everyday从每天早上 9 点之前的日期中选择值
【发布时间】:2017-07-02 03:34:06
【问题描述】:

我有一个表格,在 Oracle 数据库中每天每小时跟踪 10 辆车的里程数。例如:

Car | Mileage| Timestamp
Honda | 23.4| 11-Jan-17 08.00.00.000000 AM
Honda | 22| 11-Jan-17 09.00.00.000000 AM
Honda | 21.3 | 11-Jan-17 10.00.00.000000 AM
Honda | 24.4| 11-Jan-17 11.00.00.000000 AM
Honda | 23.2| 12-Jan-17 08.00.00.000000 AM
Honda | 25| 12-Jan-17 09.00.00.000000 AM
Honda | 26| 12-Jan-17 10.00.00.000000 AM

我不明白如何编写一个查询来每天运行过去 1 年的数据,并在每天早上 9 点之前为每辆车选择里程

【问题讨论】:

  • 好的,一些事情。您可能有不止一个car,那么为什么在您的示例数据中它们都相同?那么 - “上午 9 点之前”是否包括上午 9 点本身,还是不包括在内?无论如何,“上午 9 点之前”是什么意思——在午夜和上午 9 点之间?还是前一天早上 9 点到第二天早上 9 点?
  • 是的,有多辆车,不包括上午 9 点。我想检索最接近上午 9 点但在午夜和上午 9 点之间的日期的里程

标签: oracle datetime calculation


【解决方案1】:

假设您的意思是在午夜之后和 09:00 之前的里程数,那么以下将完成这项工作并应对其他汽车制造商。

WITH base_data AS
(SELECT car, mileage, read_date , ROW_NUMBER() OVER(PARTITION BY car,TRUNC(READ_DATE) ORDER BY read_date DESC) as ranking
   FROM   wg_test
  WHERE  EXTRACT (HOUR FROM read_date) BETWEEN 0 AND 8
    AND read_date > SYSDATE - 365)
SELECT car, mileage, read_date
  FROM base_data
 WHERE  ranking = 1

【讨论】:

  • 是的,我想要最接近上午 9 点的时间戳的里程。我相信这个查询会提取午夜到上午 9 点之间的所有时间?我的日期列是时间戳数据类型
  • 你说上午 9 点被排除在外。 . .因此您的测试数据每天只能显示 1 行。
  • 是的,我想排除上午 9 点并希望每天显示 1 条记录(最接近上午 9 点的记录)
猜你喜欢
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多