求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
。。。

谢谢
...全文
102 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 待发送时间

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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