【问题标题】:SQL convert hour to half hourly observationSQL将小时转换为半小时观察
【发布时间】:2014-03-31 21:12:59
【问题描述】:

我搜索了论坛,但找不到对我有帮助的答案。 因此,此线程的原因。

我有一个包含每小时价格观察的数据库。 我也有这个 SQL 查询语句,它进入并选择/返回特定日期范围内的每小时价格观察。

但是,我需要查询以半小时而不是每小时返回价格观察结果 --> 我想这意味着,每个观察基本上都需要重复两次,因此将其从每小时转换为每半小时。

我的代码是这样的:

SELECT A.DELIVERY_START,
  A.PRICE
FROM DMA_PREP.DMA_PRICE_V a
WHERE 1                         =1
AND A.PRODUCT_BID               ='1000286'
AND a.DELIVERY_START              >= TRUNC(TRUNC(TRUNC(sysdate,'YYYY'),'YY'),'YY')
AND a.DELIVERY_PERIOD_TYPE_NAME = 'Hour'
ORDER BY A.delivery_start

我尝试将“小时”更改为“半小时”,但没有运气,因为它开始从数据库中返回一些完全其他的值,该数据库具有半小时标签。

所以基本上,我需要查询来提取数据,但在打印之前将其转换为半小时观察一次。

现在的输出如下所示:

01-JAN-14 35

14 年 1 月 1 日 34.97

14 年 1 月 1 日 34.03

01-JAN-14 30

01-JAN-14 28.04

14 年 1 月 1 日 29.79

14 年 1 月 1 日 29.79

14 年 1 月 1 日 29.79

01-JAN-14 29.9

01-JAN-14 30.63

14 年 1 月 1 日 33.58

14 年 1 月 1 日 34.97

14 年 1 月 1 日 44.92

14 年 1 月 1 日 35.99

14 年 1 月 1 日 35.46

14 年 1 月 1 日 37.94

14 年 1 月 1 日 59.94

14 年 1 月 1 日 71.99

01-JAN-14 57.91

14 年 1 月 1 日 47.95

14 年 1 月 1 日 44.95

01-JAN-14 40.04

14 年 1 月 1 日 34.56

01-JAN-14 34.01

14 年 1 月 2 日 36.71

有什么建议吗?

【问题讨论】:

  • 请从您的数据库中添加一个示例行
  • 是否有交易完成的日期?另外,请提供一些示例数据,以及您希望从这些数据中获得什么的示例?
  • 您使用哪种 DBMS?
  • sysdatetrunc 与日期参数的使用让我相信这是一个 Oracle 问题,所以我适当地标记了它。
  • 有人已经将它设置为每小时间隔。如果幸运的话,它只是一个视图(假设 _V 表示),因此可以对其进行修改。但是,您不能自己做。您需要修改该视图后面的查询。

标签: sql oracle


【解决方案1】:

您可以使用union all

with t as (<your query here>)
    select t.DELIVERY_START, t.PRICE
    union all
    select t.DELIVERY_START + 1.0/(24*2), t.PRICE;

这使用 Oracle 语法来添加半小时,因为您的查询似乎使用了 Oracle 功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2022-01-11
    • 2013-10-14
    相关资源
    最近更新 更多