我们在Netezza中有一个带有timestamp列的表。当我用查询选择计数时:
select count(*) from *table_name*
结果是X。
但是当我查询表格时
select count(*) from *table_name* where ts_col > t1
此处t1
是表格本身的最小时间戳值,结果为Y。
现在Y比X小得多,我们没有ts_col
作为NULL
的任何值。理想情况下,X应该等于Y.这种行为可能是什么原因?
答案 0 :(得分:1)
只是为了检查,这是您正在运行的查询吗?
select count(*)
from *table_name*
where ts_col > (select min(ts_col) from *table_name*);
答案 1 :(得分:0)
如果从期望零结果得到计数(*)的非零结果,我发现最好的办法是对结果集数据的样本进行目视检查。
改变您的查询:
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值进行比较。
答案 2 :(得分:0)
因为这个查询
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)