热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

如何统计一天内的有效回复

怎么统计一天内的有效回复有一个回复表有字段作者ID,发贴时间1108-01-0115:001208-01-0116:001308-01-0117:001208-01-0118:001208-01-0216:00我现在要统计有效回复24小时内同一个人的回复算是一次有效回复计算回复数是11(1次)
怎么统计一天内的有效回复
有一个回复表

有字段
作者ID,发贴时间
11 08-01-01 15:00
12 08-01-01 16:00
13 08-01-01 17:00
12 08-01-01 18:00
12 08-01-02 16:00



我现在要统计有效回复
24小时内同一个人的回复算是一次有效回复
计算回复数是
11 (1次)
12 (2次)其中有一次是24小时内回复的所以剔除
13 (1次)
有没有比较好的算法提供,我先存到数组,通过不断遍历数组来比较,感觉太烦琐
谢谢大虾们




------解决方案--------------------
24小时有效一次,你都规定是1次了,还统计什么???
要么用时间去做减法(order by 发帖时间,用TOP2把最后两个值取出一比就完了呗,没事搞什么遍历),要么有回复就锁24小时ID
------解决方案--------------------
SQL code
SELECT *,count(DISTINCT(发贴时间的前8位)) AS times FROM table GROUP BY id

------解决方案--------------------
SELECT 作者id, 发贴时间
FROM table a
WHERE (NOT EXISTS
     (SELECT 作者id
     FROM table b
     WHERE b.作者id = a.作者id AND b.发贴时间 > a.发贴时间))
ORDER BY 作者id, 发贴时间 DESC
------解决方案--------------------
SQL code
declare @t table([作者ID] int ,[发贴时间] datetime)
insert into @t 
select 11,'08-01-01 15:00 ' union 
select 12,'08-01-01 16:00 ' union 
select 13,'08-01-01 17:00 ' union 
select 12,'08-01-01 18:00 ' union 
select 12,'08-01-02 16:00 ' 


select id,count(*)as [发贴次数] from (
select [作者ID] as id from @t group by [作者ID],
CONVERT (varchar(10),[发贴时间],120)) T group by T.id

------解决方案--------------------
select count(ID) as cnt,ID from table where str_date="xxxx-xx-xx" group by ID order by cnt
------解决方案--------------------
SELECT 作者id, 发贴时间
FROM table a
WHERE (NOT EXISTS
     (SELECT 作者id
     FROM table b
     WHERE b.作者id = a.作者id AND b.发贴时间 > a.发贴时间))
ORDER BY 作者id, 发贴时间 DESC


推荐阅读
author-avatar
手机用户2602920263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有