【发布时间】:2018-10-23 00:03:52
【问题描述】:
我有一个Oracle查询,奇怪的是查询结果有时会有所不同。
select
cast(pmm_datetime - 1 / 24 * utc_offset as timestamp) as pmm_datetime_utc,
count(distinct(NODEB_NAME)) as num_of_recs
from pmmcounter_db.WC_B_NODEBFUNCTION_QH t1
where pmm_datetime >= to_timestamp('201810230525','YYYYMMDDHH24MI')
and cast(pmm_datetime - 1 / 24 * utc_offset as timestamp) = '2018-10-22 19:15:00.000'
group by cast(pmm_datetime - 1 / 24 * utc_offset as timestamp)
大多数时候,查询返回的预期结果如下:
PMM_DATETIME_UTC NUM_OF_RECS
2018-10-22 19:15:00.000 6930
但是,它随机返回如下结果。如您所见,相同的日期时间和状态被分成了几行。
PMM_DATETIME_UTC NUM_OF_RECS
2018-10-22 19:15:00.000 785
2018-10-22 19:15:00.000 1990
2018-10-22 19:15:00.000 162
2018-10-22 19:15:00.000 3993
更奇怪的是,我曾尝试用 sum for QH_NUM_OF_RECS 来放另一个组,结果是一样的。 Oracle 好像无法按 PMM_DATETIME_UTC 分组?
这里发生了什么?为什么查询结果会不一样??????
【问题讨论】:
-
pmm_datetime 是日期、时间戳还是带时区的时间戳?
-
@tbone pmm_datetime 是 TIMESTAMP(6)。示例 '2018-10-23 05:00:00.000'
-
请注意
timestamp(6)也可以存储2018-10-22 18:15:00.000111或2018-10-22 18:15:00.000999 -
@a_horse_with_no_name,理论上是的。我们所有的时间戳都四舍五入到 15 分钟。