2012-07-27 67 views
1

我做了迁移任务,从Oracle移植数据存储Java应用程序的MySQL 5SQL(MySQL的)产生连续的日期/月报告

你可以想像,一些查询需要重写。一切都很顺利,直到我来到Reporting模块。希望你们能给我一些提示。

不久,我有一个表(比如表名“富”)

+-------------+-------------+ 
|    |    | 
| d (datetime)| v (number) | 
+-------------+-------------+ 
| 2000-01-01 |  3  | 
| 2000-01-11 |  2  | 
| 2002-07-01 |  1  | 
+-------------+-------------+ 

是我迄今所做的:

当用户给STARTDATE,结束日期为参数,我生成和报告按日期和按月:

例如2000-01-01的startDate,结束日期:2003-01-01

+-------------+-------------+ 
| day   | Sum   | 
+-------------+-------------+ 
| 2000-01-01 |  3  | 
| 2000-01-11 |  2  | 
| 2002-07-01 |  1  | 
+-------------+-------------+ 


+-------------+-------------+ 
| Month  | Sum   | 
+-------------+-------------+ 
| 2000-01  |  5  | 
| 2002-07  |  1  | 
+-------------+-------------+ 

但要求是,如果日期是不是在表中,列出了日/月不管怎么样,有了总和= 0。像:

+-------------+-------------+ 
| Month  | Sum   | 
+-------------+-------------+ 
| 2000-01  |  5  | 
| 2000-02  |  0  | 
| 2000-03  |  0  | 
| 2000-04  |  0  | 
| 2000-05  |  0  | 
| ...  | ...  | 
| 2002-07  |  1  | 
| ...  |  0  | 
+-------------+-------------+ 

这是用Oracle实现的,但是我被Mysql困住了。任何人可以提供一些提示,更好的示例代码,如何用mySql实现它?

谢谢。

+0

http://stackoverflow.com/questions/7252460/mysql-group-by-and-fill-empty-rows应该给你一些技巧。顺便说一句,Oracle在Oracle中是如何完成的? – 2012-07-27 10:34:08

+0

Oracle如何实现? – stracktracer 2012-07-27 10:34:22

+0

@RaphaëlAlthaus我会看看链接。使用Oracle,我生成月份str:SELECT DISTINCT TO_CHAR(add_months(to_date(?,'yyyy/mm'),ROWNUM-1),'yyyy/mm') 从 DUAL CONNECT BY LEVEL <= months_between to_date(?,'yyyy/mm'),to_date(?,'yyyy/mm'))+ 1)个月 然后离开加入Foo表。 – Kent 2012-07-27 10:42:37

回答

0

我在这里回答了类似的问题:

Selecting Non-existent Data With MySQL

+0

是否有任何其他方式与MySQL创建一个新的表?很好地创建日历表的作品,但不是很完美。我们必须预先保存+ - 100年日期/月等等? – Kent 2012-07-27 10:49:27

+0

200年*每年365天= 73000。仍然不是一个很大的数字。但如果你不喜欢它,那么你可以使用存储过程。 – Dojo 2012-07-27 11:29:57