检索其SUM小于连接表中的列的行

时间:2013-05-01 12:54:34

标签: mysql sum

我不确定这是否可行,甚至不是很聪明,但这里有:

我有2个表,一个是timeheets表,另一个是authorized_services。这是每个的基本表结构:

TIMESHEETS                          AUTHORIZED_SERVICES
timesheet_id                        authorized_service_id
time_in (unix timestamp)            valid_from (unix timestamp)
time_out (unix timestamp)           valid_until (unix_timestamp)
service_id (int)                    service_id (int)
service_date (unix timestamp)       number_of_units (int)

我需要查询时间表表以检索指定日期范围之间的所有结果,其中time_out的总和 - time_in / 60/60< = number_of_units。这是我提出的查询,它根据service_id和时间范围返回与授权服务匹配的所有时间表条目:

SELECT
((a.time_out - a.time_in)/60/60) as total_time,
a.service_id,
b.number_of_units,
FROM
timesheets a
LEFT JOIN authorization_services b
ON a.service_id = b.service_id
WHERE 
a.time_in >= UNIX_TIMESTAMP("2013-03-25") AND a.time_out <= UNIX_TIMESTAMP("2013-04-30")
AND a.service_date BETWEEN b.valid_from AND b.valid_until
GROUP BY a.timesheet_id;

但是,我希望只能返回结果集中total_time总和小于number_of_units的时间表条目。这可能吗?

编辑澄清: 我在PHP中为此做的是循环返回的结果并将每行的total_time加到cumulative_total_time。当cumulative_total_time等于或小于number_of_units时,我就会脱离循环。不确定在MySQL中这是可行的,或者是否可行。

1 个答案:

答案 0 :(得分:1)

我认为你需要的是

GROUP BY b.service_id
HAVING SUM((a.time_out - a.time_in)/60/60) <= b.number_of_units 不是吗?