【问题标题】:query that returns average of records within range of timestamp返回时间戳范围内记录平均值的查询
【发布时间】:2016-07-16 07:40:00
【问题描述】:

我有以下列。

-READING_DATE               timestamp - in '01-JAN-16 12.00.00.000000000 AM' format    


-DISCHARGE_M3PERSEC           number 

如何获得包括第一天(1 月 1 日)到最后一天(3 月 13 日)在内的一系列日期(直到 3 月)的每日平均每日出院量。

此外,我还需要找到每小时平均数和每月平均数。

谢谢。

--- 更新:以下查询导致错误 ORA-01855 AM 或 PM 需要。

SELECT TRUNC(READING_DATE) AS READING_DATE,
  AVG(DISCHARGE_M3PERSEC) AS DISCHARGE
  FROM HYDROMETRIC_GUELPH
  WHERE READING_DATE 
    BETWEEN TO_TIMESTAMP('01-JAN-16 12.00.00.000000000 AM','DD-MON-YY HH.MI.SSxFF AM') 
    AND TO_TIMESTAMP('13-MAR-16 05.30.00.00.000000000 PM','DD-MON-YY HH.MI.SSxFF PM')
GROUP BY TRUNC(READING_DATE);

【问题讨论】:

  • 你已经尝试了什么?
  • 查看上面的更新
  • 这可能是相关的吗? stackoverflow.com/questions/9664231/…
  • 查看this answer是否适用。
  • 我已经尝试过他们的建议,但这不是同一个问题。我认为我的是时间戳和获取每日平均值的格式。

标签: sql oracle


【解决方案1】:

时间戳没有格式。您可以使用 ANSI 时间戳文字来避免任何格式和语言/区域设置问题:

SELECT  TRUNC(READING_DATE) AS READING_DATE,
        AVG(DISCHARGE_M3PERSEC) AS DISCHARGE
FROM    HYDROMETRIC_GUELPH
WHERE   READING_DATE  BETWEEN TIMESTAMP '2016-01-01 00:00:00.000' 
                      AND     TIMESTAMP '2016-03-13 17:30:00.000'
GROUP BY TRUNC(READING_DATE);

【讨论】:

    【解决方案2】:

    查询运行良好,只是在 TO_TIMESTAMP 中有一个愚蠢的错字。您有 05 小时,30 分钟,然后您有 00 组 TWICE(秒?)只需从 TO_TIMESTAMP 中删除第二组及其句点(00.),您就有了查询。如果您需要进一步的帮助,请回信。

    【讨论】:

    • 不幸的是,当数据采用该格式时,会出现同样的错误
    • 不确定你是否理解。它应该是:05.30.00.000000。相反,你有一个额外的 00。像这样:05.30.00.00.000000。您有五组由四个句点分隔的数字,而不是由三个句点分隔的四组。
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2020-07-22
    相关资源
    最近更新 更多