• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

求SQL语句执行简单的按日查询

fanqingfeng 2005-02-27 04:14:13
表1:短信待发送表
编号 待发送时间 内容
-----------------
1 2005-1-1 12:12:02 啊啊啊啊
2 2005-1-1 13:04:26 叮叮当当
3 2005-1-2 11:05:02 滴滴答答
4 2005-2-5 10:11:22 滴滴答答
。。。

表2:短信已发送表
编号 已发送时间 内容
-----------------
1 2005-1-1 11:12:02 啊啊啊啊
2 2005-1-1 10:04:26 叮叮当当
3 2005-1-2 12:05:02 滴滴答答
4 2005-2-6 11:11:22 滴滴答答
。。。

表3:短信收到表
编号 收到信息时间 内容
-----------------
1 2005-1-1 15:12:02 啊啊啊啊
2 2005-1-1 16:04:26 叮叮当当
3 2005-1-1 19:05:02 滴滴答答
4 2005-2-5 10:11:22 滴滴答答
。。。

现在想计算每日 短信收到 待发送 已发送的数量
表:结果
时间 待发送数量 已发送数量 已接收数量
------------------------
2005-1-1 2 2 3
2005-1-2 1 2 0
2005-2-5 1 0 1
2005-2-6 0 1 0
。。。

谢谢
...全文
72 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mschen 2005-02-27
--对上边的语句加以改正.测试成功!

select 时间=(isnull(isnull(a.时间,b.时间),c.时间)),待发送数量=isnull(a.待发送数量,0),已发送数量=isnull(b.已发送数量,0),已接收数量=isnull(c.已接收数量,0)
from
(select 时间=convert(char(10),待发送时间,120),待发送数量=count(*) from 短信待发送表 group by convert(char(10),待发送时间,120)) a full outer join

(select 时间=convert(char(10),已发送时间,120),已发送数量=count(*) from 短信已发送表 group by convert(char(10),已发送时间,120)) b on a.时间=b.时间
full outer join
(select 时间=convert(char(10),收到信息时间,120),已接收数量=count(*) from 短信收到表 group by convert(char(10),收到信息时间,120)) c on b.时间=c.时间 or a.时间=c.时间
--测试结果
/*
时间 待发送数量 已发送数量 已接收数量
---------- ----------- ----------- -----------
2005-01-01 2 2 3
2005-02-05 1 0 1
2005-01-02 1 1 0
2005-02-06 0 1 0

(所影响的行数为 4 行)
*/

回复
fanqingfeng 2005-02-27
谢谢楼上各位的帮助 我再根据你们提供的试试 (上面的楼主 应该改成楼上才是 :))
回复
fanqingfeng 2005-02-27
to Softlee81307(孔腎)
谢谢楼主的热心帮助。
刚才试了 感觉结果不对,
数据库中待发送表有2条记录 已发送表有34记录 接收表有8条记录
但执行后的结果只有2条记录(即两个日 和待发送表的的日一致)
回复
fanqingfeng 2005-02-27
谢谢楼主的热心帮助。
刚才试了 感觉结果不对,
数据库中待发送表有2条记录 已发送表有34记录 接收表有8条记录
但执行后的结果只有2条记录(即两个日 和待发送表的的日一致)
回复
mschen 2005-02-27
--试试我写的这个吧!

select 时间=(isnull(isnull(a.时间,b.时间),c.时间)),待发送数量=isnull(a.待发送数量,0),已发送数量=isnull(b.已发送数量,0),已接收数量=isnull(c.已接收数量,0)
from
(select 时间=convert(char(8),待发送时间,120),待发送数量=count(*) from 短信待发送表 group by convert(char(8),待发送时间,120)) a full outer join

(select 时间=convert(char(8),已发送时间,120),已发送数量=count(*) from 短信待发送表 group by convert(char(8),已发送时间,120)) b on a.时间=b.时间
full outer join
(select 时间=convert(char(8),收到信息时间,120),已接收数量=count(*) from 短信待发送表 group by convert(char(8),收到信息时间,120)) c on b.时间=c.时间
回复
Softlee81307 2005-02-27
select 待发送时间,待发送数量=count(待发送时间),
已发送数量=isnull((select count(已发送时间) from 短信已发送表 where 已发送时间=a.待发送时间 group by 已发送时间),0),已接收数量=isnull((select count(收到信息时间) from 短信收到表 where 收到信息时间=a.待发送时间 group by 收到信息时间),0) from 短信待发送表 a group by 待发送时间
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2005-02-27 04:14
社区公告
暂无公告