sql按日期统计
我有一张表用于记录用户的访问IP,表结构是:ip、time,UserID。我想写个sql语句来统计每天访问的IP次数,我写了入下的语句selectconvert(varc...
我有一张表用于记录用户的访问IP,表结构是:
ip、time,UserID。
我想写个sql语句来统计每天访问的IP次数,我写了入下的语句
select convert(varchar(20),time,112),count(ip)
from Web_User
group by convert(varchar(20),time,112) order by convert(varchar(20),time,112)
这样写是可以统计出每天的访问次数,但是如果有一天没有一次访问那么,会出现
这天没有统计,例:
时间 次数
20101022 70
20101023 107
20101025 23
20101026 27
24号就没有记录,要想要的效果是,如果当天没有记录那么统计结果就应该为0
请各位高手帮忙 展开
ip、time,UserID。
我想写个sql语句来统计每天访问的IP次数,我写了入下的语句
select convert(varchar(20),time,112),count(ip)
from Web_User
group by convert(varchar(20),time,112) order by convert(varchar(20),time,112)
这样写是可以统计出每天的访问次数,但是如果有一天没有一次访问那么,会出现
这天没有统计,例:
时间 次数
20101022 70
20101023 107
20101025 23
20101026 27
24号就没有记录,要想要的效果是,如果当天没有记录那么统计结果就应该为0
请各位高手帮忙 展开
3个回答
展开全部
思路:先建一个中间表 sys_date(s_date var(8))
接着,把每天数据插入。
最后进行关联查询。
查询实例:
SELECT nvl(CONVERT(VARCHAR(20), TIME, 112),0), COUNT(IP)
FROM WEB_USER join sys_date on CONVERT(VARCHAR(20), TIME, 112)=sys_date.s_date
where sys_date.s_date >='20100101'
and sys_date.s_date <='20100131'
GROUP BY CONVERT(VARCHAR(20), TIME, 112)
ORDER BY CONVERT(VARCHAR(20), TIME, 112)
接着,把每天数据插入。
最后进行关联查询。
查询实例:
SELECT nvl(CONVERT(VARCHAR(20), TIME, 112),0), COUNT(IP)
FROM WEB_USER join sys_date on CONVERT(VARCHAR(20), TIME, 112)=sys_date.s_date
where sys_date.s_date >='20100101'
and sys_date.s_date <='20100131'
GROUP BY CONVERT(VARCHAR(20), TIME, 112)
ORDER BY CONVERT(VARCHAR(20), TIME, 112)
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个应该再多一个表,逻辑清晰些.
上边的这个表用于统计每天的打卡起止时间
下边的这个表用于统计每天的小时数,和每天的工资数.
id 编号 姓名 日期 开始时间 结束时间 小时工资
1 1001 黑子 2008-05-21 11:00 12:00 20
程序在每天的最后一小时取表中属于今天的记录,用日期字段来判断第一次和最后一次(最早的时间记录和最后的时间记录),获得小时数.然后用获得的小时数*小时工资.插入到第二个表里.
id 编号 姓名 日期 工作小时 总工资
1 1001 黑子 2008-05-21 1 20
除此之外,建议再多一个用户表.
上边的这个表用于统计每天的打卡起止时间
下边的这个表用于统计每天的小时数,和每天的工资数.
id 编号 姓名 日期 开始时间 结束时间 小时工资
1 1001 黑子 2008-05-21 11:00 12:00 20
程序在每天的最后一小时取表中属于今天的记录,用日期字段来判断第一次和最后一次(最早的时间记录和最后的时间记录),获得小时数.然后用获得的小时数*小时工资.插入到第二个表里.
id 编号 姓名 日期 工作小时 总工资
1 1001 黑子 2008-05-21 1 20
除此之外,建议再多一个用户表.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加上vnl()函数就可以,如果没值就会自动补0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询