请问一下:上面的图是一个学习记录表.
每天的学习时长(分钟)为:EndTime-StartTime,请问怎么取最近前两次(一天内N次学习也计为一次)的学习时长.比如上面表的数据最近的两天时长是(为当天基准):2014-11-12及2014-11-10这两天的时间学习之记录..请问这个SQL语句怎么写.谢谢...!!!
每天的学习时长(分钟)为:EndTime-StartTime,请问怎么取最近前两次(一天内N次学习也计为一次)的学习时长.比如上面表的数据最近的两天时长是(为当天基准):2014-11-12及2014-11-10这两天的时间学习之记录..请问这个SQL语句怎么写.谢谢...!!!
解决方案 »
- 如何查询跨越两年的月份查询
- SQL 2005 日志增长问题
- 这是乍回事呢?好像不应该吧?
- SQL SERVER 2005 的索引视图中的索引更新,比基表建立索引更新快吗?
- 事务(进程 ID )与另一个进程被死锁在 锁资源上,并且已被选作死锁牺牲品。请重新运行该事务
- 刚下载的sp4安装不上,说要先安装Analysis Services
- 简单问题,大家帮忙呀!!!
- DB-Library 用 dbcount 获取不到查询结果总行数?
- 求一个sql语句的写法,关于日期计算的。
- 神、救救我,sql7到sql2000!
- SQL关联查询时出现重复数据问题
- 用了begin transaction 后就一定要用commit 吗
SELECT ROW_NUMBER()OVER(ORDER BY CONVERT(VARCHAR(10),StartTime,120) DESC)RN
,UserID,CONVERT(VARCHAR(10),StartTime,120)日期
,SUM(DATEDIFF(MINUTE,StartTime,EndTime))学习时长
FROM 学习记录表
WHERE EndTime<CONVERT(VARCHAR(10),GETDATE(),120)
GROUP BY UserID,CONVERT(VARCHAR(10),StartTime,120)
)T WHERE RN<=2
如果一次仅取出一个 UserID 的数据库,使用 top 2 和 order by StartTime desc 就可以了。
每天登录多次,只计数一次,是这个意思吧?
-- 使用一下 distinct
select userid, COUNT (distinct CONVERT(varchar(10),logdate,121))
from m
where logdate < GETDATE() - 3
group by userid
go
SELECT ROW_NUMBER()OVER(PARTITION BY UserID ORDER BY CONVERT(VARCHAR(10),StartTime,120) DESC)RN
,UserID,CONVERT(VARCHAR(10),StartTime,120)日期
,SUM(DATEDIFF(MINUTE,StartTime,EndTime))学习时长
FROM (SELECT UserID,StartTime,EndTime FROM 学习记录表 GROUP BY UserID,StartTime,EndTime)T1
WHERE EndTime<CONVERT(VARCHAR(10),GETDATE(),120)
GROUP BY UserID,CONVERT(VARCHAR(10),StartTime,120)
)T WHERE RN<=3
13~18为都为本年第47周,每个ID只计数一次,所以结果为:2
8~12为本年第46周,每个ID只计数一次,所以结果为:2
7日为本年第45周,每个ID只计数一次,所以结果也为:2
按周计数,每个ID只计数一次。
就是这个意思..谢谢!!!
开个玩笑,我相信这只是你的举例代指元归正传,周日是要当成一周的结束还是开始呢
以下假设周日是一周开始SELECT DATEPART(WEEK,StartTime)[第几周],COUNT(DISTINCT Userid)[计数]
FROM 学习记录表
GROUP BY DATEPART(WEEK,StartTime)