列我不知道這是可能的,甚至聰明的,但這裏有雲:檢索行,他們的總和小於在連接表
我有2個表,一個是一個時間表表和一個是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中是可能的。
hHi Lucia - 感謝您的迴應,但只獲得的總時間少於每行的number_of_units,而不是獲取所有行的累計時間。 – 2013-05-01 22:13:14
據我所知,那麼你需要的是一個'GROUP BY b.service_id',對吧?有了這個,你將能夠通過service_id獲得累計和。我不確定這是否是您需要的。 – 2013-05-01 22:18:21
這就是我的想法,但我錯過了每個單獨的時間表行。我不認爲這是可能的。感謝您的想法和幫助! – 2013-05-02 09:06:08