- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含每小时数据和值(value)的简单表格。我想计算每个月每日最大值的平均值。
该查询起初看起来很简单:
WITH daily_max AS
(
SELECT TRUNC(the_date, 'DD') as my_day, MAX(value) AS value
FROM my_data
GROUP by TRUNC(the_date, 'DD')
)
SELECT trunc(my_day, 'MM'), AVG(value)
FROM daily_max
GROUP BY trunc(my_day, 'MM')
order by 1
;
01/01/2017 00:00:00 95
01/01/2017 00:00:00 90
01/01/2017 00:00:00 99
01/01/2017 00:00:00 96
01/01/2017 00:00:00 94
01/01/2017 00:00:00 97
01/01/2017 00:00:00 96
01/01/2017 00:00:00 86
01/01/2017 00:00:00 98
01/01/2017 00:00:00 98
01/02/2017 00:00:00 97
01/02/2017 00:00:00 93
01/02/2017 00:00:00 100
01/02/2017 00:00:00 98
01/02/2017 00:00:00 94
01/02/2017 00:00:00 99
01/02/2017 00:00:00 94
01/02/2017 00:00:00 95
01/02/2017 00:00:00 99
with daily_max AS
(
SELECT TRUNC(the_date, 'DD') as my_day, MAX(value) AS value
FROM my_data
GROUP by TRUNC(the_date, 'DD')
)
SELECT TO_CHAR(trunc(my_day, 'MM')), AVG(value)
FROM daily_max
GROUP BY TO_CHAR(trunc(my_day, 'MM'))
order by 1
;
with daily_max AS
(
SELECT CAST(TRUNC(the_date , 'DD') AS timestamp) as my_day, MAX(value) AS value
FROM my_data
GROUP by TRUNC(the_date , 'DD')
)
SELECT trunc(my_day, 'MM') AS the_month, AVG(value)
FROM daily_max
GROUP BY trunc(my_day, 'MM')
order by 1
;
01/01/2017 00:00:00 94.9
01/02/2017 00:00:00 95.78571428571428571428571428571428571429
01/03/2017 00:00:00 95.38709677419354838709677419354838709677
01/04/2017 00:00:00 94.9
01/05/2017 00:00:00 95.32258064516129032258064516129032258065
01/06/2017 00:00:00 96.46666666666666666666666666666666666667
01/07/2017 00:00:00 96.16129032258064516129032258064516129032
01/08/2017 00:00:00 96.16129032258064516129032258064516129032
01/09/2017 00:00:00 96.13333333333333333333333333333333333333
01/10/2017 00:00:00 95.87096774193548387096774193548387096774
01/11/2017 00:00:00 97.3
01/12/2017 00:00:00 96.90322580645161290322580645161290322581
01/01/2018 00:00:00 96.43478260869565217391304347826086956522
CREATE TABLE my_data
AS
SELECT TRUNC (SYSDATE - ROWNUM/24, 'HH') as the_date, ROUND(DBMS_RANDOM.value(0,100),0) AS value
FROM DUAL
CONNECT BY ROWNUM < 366*24
;
最佳答案
这似乎是 bug 20537092 ;它在 12.1.0.2(使用 CTE 或内联 View )中可重现,但在 11.2.0.4 或 12.2.0.1 中可重现。
该文档中的解决方法似乎可以解决此问题;设置后运行您的示例
alter session set "_optimizer_aggr_groupby_elim"=false;
TRUNC(MY_DAY,'MM') AVG(VALUE)
------------------- ----------
2017-01-01 00:00:00 95.5
2017-02-01 00:00:00 95.6428571
2017-03-01 00:00:00 95.3225806
2017-04-01 00:00:00 95.6666667
2017-05-01 00:00:00 97.0322581
2017-06-01 00:00:00 95.7
2017-07-01 00:00:00 95.0967742
2017-08-01 00:00:00 96.1935484
2017-09-01 00:00:00 94.9333333
2017-10-01 00:00:00 96
2017-11-01 00:00:00 96.9333333
2017-12-01 00:00:00 95.3870968
2018-01-01 00:00:00 95.0434783
WITH daily_max AS
(
SELECT DISTINCT TRUNC(the_date, 'DD') as my_day,
MAX(value) OVER (PARTITION BY TRUNC(the_date, 'DD')) AS value
FROM my_data
)
SELECT trunc(my_day, 'MM'), AVG(value)
FROM daily_max
GROUP BY trunc(my_day, 'MM')
order by 1
;
关于sql - GROUP BY TRUNC 的链(日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48405262/
使用方法 TRUNC SQL Server 2012 中的函数,因为我收到错误: 'TRUNC' is not a recognized built-in function name.' 当我执行语句
看下面的代码,为什么Trunc函数的结果不一样? procedure TForm1.Button1Click(Sender: TObject); var D: Double; E: Exten
我想在javascript中 chop 一个数字,即去掉小数部分: chop (2.6)==2 trunc (-2.6) == -2 经过大量基准测试后,我的答案是: function trunc
下面的代码在 Chrome 中运行良好,但在 IE 浏览器中我看到以下控制台错误: object does not support property or method 'trunc' 代码: var
java.lang.Math 类有 ceil()、floor()、round() 方法,但没有 trunc() 方法。 同时,我在实践中看到 .intValue() 方法(实际上执行 (int) 转换
tl;dr: double b=a-(size_t)(a) 比 double b=a-trunc(a) 快 我正在为图像实现旋转功能,我注意到 trunc 功能似乎非常慢。 图像的循环代码,像素的实际
oracle trunc()函数是最常用的函数之一,下面就为您介绍oracle trunc()函数的用法,供您参考,希望可以让您对oracle trunc()函数有更深的认识。 1.TRUNC(f
从 1.3.172 版本开始,有一个 TRUNC 函数,它模仿了 Oracle 的 TRUNC(TIMESTAMP)。实现过程中存在一个小问题。查询: select TRUNC(TIMESTAMP '
我有两个不同大小的变量“a”和“b”,见下文。我有几个问题: (1) 如何将“a”的值复制到“b”? (即扩展操作) (2) 如何将“b”的值复制到“a”? (即截断操作) 谢谢。 a = BitVe
select trunc('11.01') from dual 输出:11 jasper 报告中的 BigDecimal 数据类型是什么。是否有任何解决方法可以将其作为字符串。 最佳答案 Oracle
我需要限定来自 Oracle 数据库的查询以获取基于特定日期范围的报告 第一个查询 5pm-7am(昨天下午 5 点到今天早上 7 点之间) 第二个查询 早上 7 点到下午 5 点((昨天下午 5 点
我尝试在 Blender 2.49b Python 中使用 math.trunc 但我收到此错误 AttributeError: 'module' object has no attribute 't
我正在尝试使用以下方法截断 PostgreSQL 中的数字: SELECT trunc(31.71429,15); 我有这个输出: 31.714290000000000 但是在 Oracle 中我有这
我有旧的pascal代码 var i : longint; m : double; begin ..... i := trunc(m); 我必须将它转换为 C++ 代码。 这里很明显的
本文给大家分享的oracle trunc 函数处理日期格式的相关知识,非常具有参考价值,具体请看下文说明吧。 复制代码代码如下: select to_char(sys
我来自 SQL Server 世界,有人要求我弄清楚一段(古老的)Oracle 脚本是怎么回事。 CAVEAT: I don't have access to the Oracle server, I
在通过 Java 库翻译 Google Translate API 中的短语时,我突然得到了同样奇怪的标记。英语 → 瑞典语的示例包括: Vector graphics → vektor~~POS=T
为什么 从双中选择 trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DAY'); 返回 2017年6月19日 不是预期的 2017年6月23日? 我们使用的是 O
我有一个包含每小时数据和值(value)的简单表格。我想计算每个月每日最大值的平均值。 该查询起初看起来很简单: WITH daily_max AS ( SELECT TRUNC(the_date
trunc()有什么区别和 as.integer() ? 为什么是 as.integer快点?谁能解释一下幕后发生了什么? 为什么trunc()返回类double而不是 integer ? x 43
我是一名优秀的程序员,十分优秀!