在postgres中给出错误的sql平均时间戳数据

cnwbcb6i  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(387)

一段时间以来我一直在努力寻找答案。让我尝试迭代这个问题。我有一个名为mytable的表:(note:below table 只是一个大表的一小部分(有数千行)

  1. timestamp_original data
  2. 2020/05/24 15.30.31.620 0
  3. 2020/05/24 15.30.31.649 1
  4. 2020/05/24 15.30.31.658 2
  5. 2020/05/24 15.30.31.668 3
  6. 2020/05/24 15.30.31.688 4
  7. 2020/05/24 15.30.31.698 5
  8. 2020/05/24 15.30.31.708 6
  9. 2020/05/24 15.30.31.738 7
  10. 2020/05/24 15.30.31.748 8
  11. 2020/05/24 15.30.31.758 9
  12. 2020/05/24 15.30.31.768 10
  13. 2020/05/24 15.30.31.809 11
  14. 2020/05/24 15.30.31.810 12
  15. 2020/05/24 15.30.31.812 13
  16. 2020/05/24 15.30.31.838 14
  17. 2020/05/24 15.30.31.848 15

我的期望是得到每毫秒之间的平均数据,同时将毫秒舍入到10秒。

  1. timestamp_new myData
  2. 2020/05/24 15.30.31.6 2.5
  3. 2020/05/24 15.30.31.7 8
  4. 2020/05/24 15.30.31.8 13

我的代码如下:

  1. SELECT date_trunc('milliseconds','timestamp_original')::timestamp(1) as timestamp_new,
  2. avg(data) as myData
  3. FROM myTable
  4. GROUP BY 1 ORDER BY timestamp_new;

但我得到的输出如下,这没有任何意义

  1. timestamp_new myData
  2. 2020/05/24 15.30.31.6 0.5
  3. 2020/05/24 15.30.31.7 5
  4. 2020/05/24 15.30.31.8 12

请帮帮我。

kxeu7u2r

kxeu7u2r1#

转换为 timestamp(1) 舍入而不是截断。一个简单的解决方案是减去50毫秒:

  1. SELECT date_trunc('millisecond', timestamp_original - interval '50 millisecond')::timestamp(1) as timestamp_new,
  2. avg(data) as myData
  3. FROM myTable
  4. GROUP BY 1
  5. ORDER BY timestamp_new;

这是一把小提琴。

相关问题