CREATE TABLE `tbl_daily_report_blogger` (
`create_date` DATE NOT NULL COMMENT '创建日期',
`campaign_id` CHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '广告主键',
`blogger_id` CHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'blogger主键',
`imp_amount` INTEGER(10) NOT NULL DEFAULT '0' COMMENT '展示量',
`click_amount` INTEGER(8) NOT NULL DEFAULT '0' COMMENT '点击量'
)
SELECT create_date,sum(imp_amount),sum(click_amount)
FROM tbl_daily_report_blogger
WHERE blogger_id=‘111111’
GROUP BY create_date
ORDER BY create_date asc
大体意思是这样的
数据库里有
2008-12-01 10 1000
2008-12-03 10 1000
怎样查出来是
2008-12-01 10 1000
2008-12-02 0 0
2008-12-03 10 1000
想了很长时间
只是想到可以拿到最大最小时间 怎样把所有的时间遍历出来,达到上面的效果
------解决方案--------------------
生成一个12月份完整日期的临时表,即1-31日,临时表只有日期字段,再与工作表连接
SELECT create_date,sum(imp_amount),sum(click_amount) FROM (
SELECT 日期,0,0 FROM 临时表
UNION ALL
SELECT create_date,imp_amount,click_amount FROM 工作表) A
WHERE blogger_id=‘111111’
GROUP BY create_date
ORDER BY create_date asc
------解决方案--------------------
实现这个功能,如果是非oracle数据库,
则需要建一张日历表
cretae table calendar (
cdate DATE constraint pk_calendar primary key
)
然后生成全年日历,这个可以通过EXCEL生成一个日期序列,然后用公式生成SQL语句,一次性INSERT就行了。
- SQL code
SELECT cdate,sum(imp_amount),sum(click_amount) FROM calendar c left join tbl_daily_report_blogger d on c.cdate=d.create_dateWHERE blogger_id=‘111111’ GROUP BY create_date ;
------解决方案--------------------
http://218.28.143.234/demo,这里有个补齐日期的报表演示。制作很简单的。可以到qq群60531400讨论
------解决方案--------------------
帮顶
------解决方案--------------------
帮顶
------解决方案--------------------
这个用2楼的方法应该可以