需要查询帮助 - 我同时使用SQL Server和MySQL。
我有一个用户工作时间表,如下所示:
USER WORKTIME DATE
user1 08:00:00 2015-03-01
user1 08:00:00 2015-03-02
user1 08:00:00 2015-03-03
user2 08:30:00 2015-03-11
user2 10:00:00 2015-03-13
user3 05:00:00 2015-03-11
user3 05:00:00 2015-03-12
user3 05:00:00 2015-03-14
我需要的是每个用户的最后日期,当他的工作时间总和小于或等于x时 - 对于这个例子,让我们说它是18 - 加上该日期的工作时间总和 - 所以我的结果应该是:
USER WORKTIME DATE
user1 16:00:00 2015-03-02
user2 08:30:00 2015-03-11
user3 15:00:00 2015-03-14
使用这样的简单查询时:
select user,
sum(worktime),
max(date)
from worktime
group by user
having sum(worktime) <= 18
我只获得总小时数<= 18的用户,本例中为user3。
我知道如何使用2个单独的查询和一些excel函数来完成它,但是想知道是否可以在单个语句中执行此操作。
答案 0 :(得分:1)
如果两个数据库都需要这个,那么我会建议一个相关的子查询来获取累积的时间。然后,您可以获得所需的值:
select user, max(date)
from (select wk.*,
(select sum(wk2.worktime)
from worktime wk2
where wk2.user = wk.user and
wk2.date <= wk.date
) cume_worktime
from worktime wk
) t
where cume_worktime <= 18
group by user;
这是ANSI标准SQL,应该可以在两个数据库中使用。
答案 1 :(得分:0)
使用相同的表格进行左联接(没有对其进行测试,但应该是这些行中的内容):
select u.user, sum(u.worktime), max(u.date),
sum(u1.worktime)
from worktime AS u LEFT JOIN worktime AS u1 ON u.user=u1.user WHERE u1.date<max(u.date)
group by u.user
having sum(u.worktime) <= 18