向高手请教sql一条 急急急

liuhua19841201 2009-03-02 09:58:57
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

想了很长时间

只是想到可以拿到最大最小时间 怎样把所有的时间遍历出来,达到上面的效果

...全文
86 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
msword2007 2009-03-05
  • 打赏
  • 举报
回复
帮顶
quilte 2009-03-05
  • 打赏
  • 举报
回复
这个用2楼的方法应该可以
msword2007 2009-03-04
  • 打赏
  • 举报
回复
帮顶
lzmch11 2009-03-04
  • 打赏
  • 举报
回复
http://218.28.143.234/demo,这里有个补齐日期的报表演示。制作很简单的。可以到qq群60531400讨论
wwwwb 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuhua19841201 的回复:]
上面两个大哥的意思我明白 ,有没有直接知道起始时间就能遍历所有时间的函数
谢谢了
[/Quote]
呵呵,没有 ,用SP循环取值
liuhua19841201 2009-03-02
  • 打赏
  • 举报
回复
用的mysql,哎
ACMAIN_CHM 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuhua19841201 的回复:]
上面两个大哥的意思我明白 ,有没有直接知道起始时间就能遍历所有时间的函数
谢谢了
[/Quote]

没有,这种函数,不过可以自己写个procedure。 如果oracle中则可以通过connect to来生成。
liuhua19841201 2009-03-02
  • 打赏
  • 举报
回复
上面两个大哥的意思我明白 ,有没有直接知道起始时间就能遍历所有时间的函数
谢谢了
ACMAIN_CHM 2009-03-02
  • 打赏
  • 举报
回复
实现这个功能,如果是非oracle数据库,
则需要建一张日历表
cretae table calendar (
cdate DATE constraint pk_calendar primary key
)

然后生成全年日历,这个可以通过EXCEL生成一个日期序列,然后用公式生成SQL语句,一次性INSERT就行了。

SELECT cdate,sum(imp_amount),sum(click_amount) 
FROM calendar c left join tbl_daily_report_blogger d
on c.cdate=d.create_date
WHERE blogger_id=‘111111’
GROUP BY create_date ;


当然理论上你可以通过很多 select '2009-12-01' union all select '2009-12-02' 得到这个日期序列,但SQL的字符长度是有限制的。
wwwwb 2009-03-02
  • 打赏
  • 举报
回复
生成一个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

6,108

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据库报表
社区管理员
  • 数据库报表社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧