思路:先建一个中间表 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)
这个应该再多一个表,逻辑清晰些.
上边的这个表用于统计每天的打卡起止时间
下边的这个表用于统计每天的小时数,和每天的工资数.
id 编号 姓名 日期 开始时间 结束时间 小时工资
1 1001 黑子 2008-05-21 11:00 12:00 20
程序在每天的最后一小时取表中属于今天的记录,用日期字段来判断第一次和最后一次(最早的时间记录和最后的时间记录),获得小时数.然后用获得的小时数*小时工资.插入到第二个表里.
id 编号 姓名 日期 工作小时 总工资
1 1001 黑子 2008-05-21 1 20
除此之外,建议再多一个用户表.
加上vnl()函数就可以,如果没值就会自动补0