我试图找出两个表的时间戳之间的时间差(以毫秒为单位)。像这样,
SELECT value, (table1.time - table2.time) AS time_delta但我错了:
llegal types DateTime64(9) and DateTime64(9) of arguments of function minus:所以我不能在点击室中减去DateTime64。
第二种方法我尝试使用DATEDIFF,但是这个功能受到“秒”的限制,我需要以“毫秒”为单位的值。
这是支持的,但我在diff中得到了零,因为差太低(很少毫秒):
SELECT value, dateDiff(SECOND , table1.time, table2.platform_time) AS time_delta这是不支持的:
SELECT value, dateDiff(MILLISECOND , table1.time, table2.time) AS time_delta有什么更好的方法来解决我的问题?
我也试着把值转换成浮动,这很有效,但看起来很奇怪,
SELECT value, (toFloat64(table1.time) - toFloat64(table2.time)) AS time_delta结果我得到了这样的想法:
value time
51167477 -0.10901069641113281发布于 2022-07-01 19:41:41
@ditrauth尝试转换到Float64,因为您要查找的次秒部分存储为十进制。另外,您想要DateTime64(3)数毫秒,请参阅文档。见下文:
CREATE TABLE dt(
start DateTime64(3, 'Asia/Istanbul'),
end DateTime64(3, 'Asia/Istanbul')
)
ENGINE = MergeTree ORDER BY end
insert into dt values (1546300800123, 1546300800125),
(1546300800123, 1546300800133)
SELECT
start,
CAST(start, 'Float64'),
end,
CAST(end, 'Float64'),
CAST(end, 'Float64') - CAST(start, 'Float64') AS diff
FROM dt
┌───────────────────start─┬─CAST(start, 'Float64')─┬─────────────────────end─┬─CAST(end, 'Float64')─┬─────────────────diff─┐
│ 2019-01-01 03:00:00.123 │ 1546300800.123 │ 2019-01-01 03:00:00.125 │ 1546300800.125 │ 0.002000093460083008 │
│ 2019-01-01 03:00:00.123 │ 1546300800.123 │ 2019-01-01 03:00:00.133 │ 1546300800.133 │ 0.009999990463256836 │
└─────────────────────────┴────────────────────────┴─────────────────────────┴──────────────────────┴──────────────────────┘
2 rows in set. Elapsed: 0.001 sec. https://stackoverflow.com/questions/72815996
复制相似问题