0

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

我有两张表,一张是时间表表,一张是授权服务表。这是每个的基本表结构:

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 中实现这一点。

4

1 回答 1

1

我想你需要的是

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

于 2013-05-01T12:59:27.290 回答