我有这样的数据列表。
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数据库中。
答案 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
格式。