-- NaN and rounding follow Prometheus (IEEE 754) rather than SQL ordering. -- Expected results are from Prometheus 3. create table float_semantics ( ts timestamp time index, val double, host string primary key ); Affected Rows: 0 insert into float_semantics values (0, 1.0, 'a'), (0, 2.0, 'b'), (0, 'NaN'::double, 'c'), (0, -2.5, 'd'); Affected Rows: 4 tql eval (0, 0, '1s') max(float_semantics); +---------------------+--------------------------+ | ts | max(float_semantics.val) | +---------------------+--------------------------+ | 1970-01-01T00:00:00 | 2.0 | +---------------------+--------------------------+ tql eval (0, 0, '1s') min(float_semantics); +---------------------+--------------------------+ | ts | min(float_semantics.val) | +---------------------+--------------------------+ | 1970-01-01T00:00:00 | -2.5 | +---------------------+--------------------------+ tql eval (0, 0, '1s') topk(1, float_semantics); +-----+------+---------------------+ | val | host | ts | +-----+------+---------------------+ | 2.0 | b | 1970-01-01T00:00:00 | +-----+------+---------------------+ -- SQLNESS SORT_RESULT 3 1 tql eval (0, 0, '1s') float_semantics <= NaN; +----+-----+------+ | ts | val | host | +----+-----+------+ +----+-----+------+ -- SQLNESS SORT_RESULT 3 1 tql eval (0, 0, '1s') float_semantics != bool NaN; +------+---------------------+---------------------+ | host | ts | val != Float64(NaN) | +------+---------------------+---------------------+ | a | 1970-01-01T00:00:00 | 1.0 | | b | 1970-01-01T00:00:00 | 1.0 | | c | 1970-01-01T00:00:00 | 1.0 | | d | 1970-01-01T00:00:00 | 1.0 | +------+---------------------+---------------------+ -- SQLNESS SORT_RESULT 3 1 tql eval (0, 0, '1s') round(float_semantics); +---------------------+----------------------------+------+ | ts | prom_round(val,Float64(1)) | host | +---------------------+----------------------------+------+ | 1970-01-01T00:00:00 | -2.0 | d | | 1970-01-01T00:00:00 | 1.0 | a | | 1970-01-01T00:00:00 | 2.0 | b | | 1970-01-01T00:00:00 | NaN | c | +---------------------+----------------------------+------+ -- SQLNESS SORT_RESULT 3 1 tql eval (0, 0, '1s') sqrt(float_semantics); +---------------------+--------------------+------+ | ts | sqrt(val) | host | +---------------------+--------------------+------+ | 1970-01-01T00:00:00 | 1.0 | a | | 1970-01-01T00:00:00 | 1.4142135623730951 | b | | 1970-01-01T00:00:00 | NaN | c | | 1970-01-01T00:00:00 | NaN | d | +---------------------+--------------------+------+ -- prom_min/prom_max have their own column names, so SQL can use them next to min/max. select min(val) as sql_lo, prom_min(val) as prom_lo from float_semantics; +--------+---------+ | sql_lo | prom_lo | +--------+---------+ | -2.5 | -2.5 | +--------+---------+ select max(val) as sql_hi, prom_max(val) as prom_hi from float_semantics; +--------+---------+ | sql_hi | prom_hi | +--------+---------+ | NaN | 2.0 | +--------+---------+ select prom_min(val) as lo from float_semantics having min(val) < 0; +------+ | lo | +------+ | -2.5 | +------+ drop table float_semantics; Affected Rows: 0