假设我的表格如下所示
actionTable
-----------
id, user, actionName, time
1 , userX, startdoing, 1/1/2010 9am
2, userX, endDoing, 2/1/2010 10am
我可以知道是否可以使用1 sql select语句从1分钟记录2并花费时间?或者使用hibernate.criteria来做到这一点?
答案 0 :(得分:1)
这样的事情好几个小时
select s.[user], datediff(hh,s.time,e.time) as duration
from actiontable s
join actiontable e on s.[user] = e.[user] and e.actionname = 'enddoing'
where s.actionname = 'startdoing'
给我这个:
user duration
---------- -----------
userX 745
更改为datediff(minute,s.time,e.time)
会给出此
user duration
---------- -----------
userX 44700
如果您只有一个开始和结束时间,这将适用于整个用户表及其开始和结束时间...如果您没有一个,那么它会变得更复杂一些 - 简单的方法(使用mssql 2005+)就是这样做:
;with sitems as
(
select [user], max([time]) as [time]
from actiontable
where actionname = 'startdoing'
group by [user]
), eitems as
(
select [user], max([time]) as [time]
from actiontable
where actionname = 'enddoing'
group by [user]
)
select s.[user], datediff(minute,s.time,e.time) as duration
from sitems s
join eitems e on s.[user] = e.[user]