我们在Netezza中有一个包含时间戳列的表。当我与查询选择计数:查询Netezza中的时间戳列
select count(*) from *table_name*
结果是X.
但是当我查询的表像
select count(*) from *table_name* where ts_col > t1
这里t1
从表本身最小时间戳值结果是Y.
现在Y比X小很多,我们没有任何值ts_col
作为NULL
。理想情况下,X应该等于Y.这种行为的原因是什么?
我们在Netezza中有一个包含时间戳列的表。当我与查询选择计数:查询Netezza中的时间戳列
select count(*) from *table_name*
结果是X.
但是当我查询的表像
select count(*) from *table_name* where ts_col > t1
这里t1
从表本身最小时间戳值结果是Y.
现在Y比X小很多,我们没有任何值ts_col
作为NULL
。理想情况下,X应该等于Y.这种行为的原因是什么?
只是为了检查,这是你正在运行的查询?
select count(*)
from *table_name*
where ts_col > (select min(ts_col) from *table_name*);
如果从计数得到一个非零的结果(*)当你所期望的结果为零,我觉得做的最好的事情是执行结果集的样品进行目视检查数据。
从改变你的查询:
select count(*) from table_name where ts_col > t1
到
select ts_col, t1 from table_name where ts_col > t1 limit 10
这里我假定T1是一个常数/字面。
此查询的结果将指示您在表中您所期望的内容。如果ts_col没有被定义为NOT NULL,那么NULL可能是你的罪魁祸首,因为它们不会在布尔表达式中计算为TRUE。
否则,请检查您获得的值,注意显示的类型或精度并将其与t1值进行比较。
,因为查询
select count(*) from *table_name* where ts_col > t1
不等于该查询。
select count(*) from *table_name* where ts_col >= t1
如果没有空值,那么t1的值必须恰好在您的表中发生X - Y
次。
你的评论上,有表中的空值的问题,所以我假定Y = X - (select count(1) from *table_name* where ts_col is null)
你有一个'where'子句可以过滤行。 Y显然会小于X –
表中有很多“Y”的值。 –
对数据进行视觉检查是一个好主意。用ts_col替换count(*),并向我们显示t1的值以及它认为小于t1的ts_col的值。 – ScottMcG