使用java以最有效的方式汇总数据列表

时间:2016-02-12 08:01:38

标签: java database postgresql

我有这样的数据列表。

start: 1455262571155, seconds: 40, name: "quant1"
start: 1455263331610, seconds: 120, name: "quant2"
start: 1455263331610, seconds: 120, name: "quant2"
start: 1455263331610, seconds: 120, name: "quant3"

列表将继续下去。当传感器上线并持续多长时间时,它总是有一个时间戳。你似乎价值不是唯一的,可以同时出现。同时,可以出现另一个值。

现在我想将这些数据重新转换为这种格式。

time: 12:50, value: "quant1", amount: 1
time: 12:51, value: "quant2", amount: 2
time: 12:52, value: "quant2", amount: 1

(假设开始时间戳代表12:50 ......)

现在我看到了不同的问题,因为算法需要检查是否已存在给定时间戳的值。在Java中执行此操作的最有效方法是什么?

这些数据存储在PostgreSQL数据库中。

1 个答案:

答案 0 :(得分:2)

这些方面的东西会给你你想要的东西:

SELECT TO_CHAR(TIMESTAMP 'epoch' + (start / 1000) * INTERVAL '1 second', 'HH:MI') AS time,
    name AS value, COUNT(*) AS amount
FROM yourTable
GROUP BY TO_CHAR(TIMESTAMP 'epoch' + (start / 1000) * INTERVAL '1 second', 'HH:MI'),
    name

此处的复杂性是将自纪元以来的秒数转换为TIMESTAMP,然后将该时间戳转换为HH:MI格式。

代码

TIMESTAMP 'epoch' + (start / 1000) * INTERVAL '1 second'

将您的start字段(以毫秒为单位)转换为TIMESTAMP类型。需要1000除以将毫秒转换为秒。 TO_CHAR()函数会将该时间戳转换为您想要的HH:MI格式。