基本HSQLDB查询嵌套子查询/子集问题

时间:2014-04-26 07:23:23

标签: hsqldb

我对数据库和LibreOffice Base / HSQLDB相对较新。我安装了最新的Base。 我的自行车数据库有1个表“BikeDate”,有4个字段如下:

| RideID | RideDate | Bike | Miles |
 1        10/2/97    Y22    15.6
....... with say 620 entries

我想要获得的是对过去17年里每月游乐设施的比较。我的指标将是所有年份每个月的所有游乐设施的总和,然后是所有年份中每个月的平均行程,然后是2014年每个月的里程数和2014年每个月的平均行程数

这是我到目前为止所做的:

SELECT MONTH( "RideDate" ) AS "MONTH", SUM( "Miles" ) AS "SUM of Miles", AVG( "Miles" ) AS "AVG of Miles", 
( SELECT SUM( "Miles" ) FROM "BikeDate" WHERE ( YEAR( "RideDate" ) = '2014' ) ORDER BY MONTH( "RideDate" ) ) AS "Sum 2014", 
( SELECT AVG( "Miles" ) FROM "BikeDate" WHERE ( YEAR( "RideDate" ) = '2014' ) ORDER BY MONTH( "RideDate" ) ) AS "Avg 2014" 
FROM "BikeDate" AS "BikeDate" 
GROUP BY MONTH( "RideDate" ) 
ORDER BY MONTH( "RideDate" ) ASC

输出:

|MONTH | Sum of Miles | AVG of Miles | Sum 2014 | AVG 2014 |
 2     | 12.2         | 6.1          | 29       | 14.5     |   
 3     | 217.9        | 10.38        | 29       | 14.5     |
 4     | 744.3        | 12.2         | 29       | 14.5     |
 5     | 1316.3       | 17.55        | 29       | 14.5     |
....                                 
 12    | 70.2         | 11.7         | 29       | 14.5     |

第一:可以这样做吗?第2个月的2014年专栏都应该为零(我们有48英寸的降雪量,目前的总数为338英寸)。我怎样才能让它发挥作用?我想留在LO Base,因为它是免费的,目前已安装。

谢谢,戴夫。

1 个答案:

答案 0 :(得分:1)

使用与LO Base捆绑在一起的HSQLDB 1.8数据库看起来很难实现。您可以将最新的HSQLDB 2.3.x用作LO的外部数据库。此版本允许您使用下面的表达式来表示当前年份:

AVG ("Miles") FILTER (WHERE YEAR("RideDate") = 2014)

您可以在主选择中使用此和SUM的类似表达式以及SUM和AVG表达式。不需要使用额外的子选择查询。

检查"拆分数据库"的http://www.oooforum.org和其他资源。使用最新的HSQLDB和LO的解决方案。