5

运行 MonetDB 数据库服务器工具包 v1.1 (Feb2013-SP6)

这个查询

select rowtype, min(zdate), max(zdate) , count(*) 
from fdhista 
group by rowtype 
;

为每个行类型返回正确的最小和最大日期。

rowtype L1  L2  L3
3   1970-12-31  2009-07-31  1664186
1   2003-02-24  2013-09-13  11649306

这个查询,在同一张表上

select min(zdate), max(zdate), count(*) from fdhista where rowtype=3;

似乎“忽略” where 子句,返回

L1  L2  L3
1970-12-31  2013-09-13  13313492

我还没有找到该答案的一般 sql 先例(还)。这是预期的反应吗?

我期待这个

L1  L2  L3
1970-12-31  2009-07-31  1664186

我在 Oracle 和 SQL Server 中尝试了类似的查询并得到了我的预期响应。然而,我发现支持“忽略”where 子句的通用 sql 注释。也许这是 MonetDB 使用特定 SQL 标准的一个案例?

4

1 回答 1

2

同意,看起来像一个错误,但在此示例中无法重现:

create table fdhista (rowtype tinyint, zdate date);
insert into fdhista values (1,'2013-09-13'),(1,'1970-12-31'),(3,'2013-09-14'),(3,'1970-12-30'),(3,'1984-06-24');

当我然后跑

select rowtype, min(zdate), max(zdate) , count(*)  from fdhista  group by rowtype;

我明白了

+---------+------------+------------+------+
| rowtype | L1         | L2         | L3   |
+=========+============+============+======+
|       1 | 1970-12-31 | 2013-09-13 |    2 |
|       3 | 1970-12-30 | 2013-09-14 |    3 |
+---------+------------+------------+------+

并且有限制

select min(zdate), max(zdate), count(*) from fdhista where rowtype=3;

我明白了

+------------+------------+------+
| L1         | L2         | L3   |
+============+============+======+
| 1970-12-30 | 2013-09-14 |    3 |
+------------+------------+------+

一切看起来都很好,但我在这里运行的是最新的 MonetDB 版本。

所以首先,更新到最新的 MonetDB 版本 Jan2014。其次,请在http://bugs.monetdb.org/的 bugtracker 中报告 MonetDB 错误。请确保在错误报告中包含足够的信息以便可以复制它,我不得不猜测架构并在这种情况下提供示例数据。

于 2014-02-23T12:00:48.237 回答