关于sql:Oracle GROUP BY 和日期精度 | 珊瑚贝

Oracle GROUP BY and date precision


我有一个包含两个日期字段的表格:BEGIN_DATE 和 END_DATE

当我减去这两个字段时,我得到一个以天为单位的数字。
我想要这个数字以秒为单位,因为这两个字段之间的差异非常小(~ 1s)。
所以我继续做:

1
2
3
4
5
6
SELECT ROUND(AVG((END_DATEBEGIN_DATE)*3600*24),2) AS DELTA,
       TO_CHAR(BEGIN_DATE, ‘yyyy-mm-dd hh24:mi:ss’) AS DEB,
       TO_CHAR(END_DATE, ‘yyyy-mm-dd hh24:mi:ss’) AS FIN
FROM MYTABLE
GROUP BY TO_CHAR(BEGIN_DATE, ‘yyyy-mm-dd hh24:mi:ss’),
         TO_CHAR(END_DATE, ‘yyyy-mm-dd hh24:mi:ss’);

这是结果(按分钟分组的精度相同):
enter image description here

嗯。
然后,如果我按小时或按天对结果进行分组:

1
2
3
4
5
6
SELECT ROUND(AVG((END_DATEBEGIN_DATE)*3600*24),2) AS DELTA,
       TO_CHAR(BEGIN_DATE, ‘yyyy-mm-dd hh24’) AS DEB,
       TO_CHAR(END_DATE, ‘yyyy-mm-dd hh24’) AS FIN
FROM MYTABLE
GROUP BY TO_CHAR(BEGIN_DATE, ‘yyyy-mm-dd hh24’),
         TO_CHAR(END_DATE, ‘yyyy-mm-dd hh24’);

我得到了这个结果:
enter image description here

DELTA 精度更好,我不明白为什么!

谁能解释一下?

  • 因为 0 和 1 的平均值是 0.5?
  • 如果您从 SELECT 中删除列 Deb 和 Fin,该行为是否会继续?还有你的 nls_date_format 参数的默认值是多少?


我的不好,不要再进一步了,问题比较简单。

浮动结果由以下公式给出:SUM(DELTA) / COUNT(Grouped rows)。

所以如果我在 2015-11-02 19 有 20 个值。
这些值中有 9 个等于 1,余数等于 0。
我们有 9/20 = 0.45,这绝对是合乎逻辑的。
我刚刚验证过了。

感谢您的宝贵时间。


来源:https://www.codenong.com/34158158/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9481.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?