关于sql:Oracle GROUP BY 和日期精度

Oracle GROUP BY and date precision

我有一个包含两个日期字段的表格:BEGIN_DATEEND_DATE

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

1
2
3
4
5
6
SELECT ROUND(AVG((END_DATE-BEGIN_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_DATE-BEGIN_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 精度更好,我不明白为什么!

谁能解释一下?


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

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

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

感谢您的宝贵时间。