2015-10-21 118 views
0

我们在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.这种行为的原因是什么?

+0

你有一个'where'子句可以过滤行。 Y显然会小于X –

+0

表中有很多“Y”的值。 –

+0

对数据进行视觉检查是一个好主意。用ts_col替换count(*),并向我们显示t1的值以及它认为小于t1的ts_col的值。 – ScottMcG

回答

1

只是为了检查,这是你正在运行的查询?

select count(*) 
from *table_name* 
where ts_col > (select min(ts_col) from *table_name*); 
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值进行比较。

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)