0
我想要連接4個表以列出表中所有具有從上次更新到當前日期的持續時間的值,而不是其他表中的持續時間,表中給出如下(我的英語不是很好理解這樣正與examble解釋)如何從CURDATE()前n天從MySQL獲得值()
第一臺daily_tasks
+---------+---------+
| task_id | type_id |
+---------+---------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
+---------+---------+
二表daily_task_report
+-----------+---------+------------+
| report_id | task_id | task_date |
+-----------+---------+------------+
| 1 | 1 | 2015-09-10 |
| 2 | 3 | 2015-09-10 |
| 3 | 1 | 2015-09-11 |
| 4 | 3 | 2015-09-16 |
+-----------+---------+------------+
三表duration_types
+---------+---------------+------------------------+
| type_id | duration_type | duration_time(in days) |
+---------+---------------+------------------------+
| 1 | Daily Task | 1 |
| 2 | Weekly Task | 6 |
| 3 | Monthly Task | 26 |
| 4 | Yearly Task | 313 |
+---------+---------------+------------------------+
四表calendar
+--------+------------+---------+
| cal_id | cal_date | holiday |
+--------+------------+---------+
| 1 | 2015-09-10 | 0 |
| 2 | 2015-09-11 | 0 |
| 3 | 2015-09-12 | 0 |
| 4 | 2015-09-13 | 1 |
+--------+------------+---------+
這裏daily_tasks.type_id
是duration_types.type_id
和daily_task_report.task_id
爲daily_tasks.task_id
。我想選擇所有task_id
那些task_date
和current_date
之間的差異將大於duration_time
,同時計算我必須避免從有holiday=1
的日期的持續時間。 我試過查詢,但不正確,我得到的值不包括calendar
表,但這不是一個好方法,查詢需要更多時間來執行。
"SELECT dailyTasks.task_id FROM
(SELECT tab.* FROM (SELECT
tasks.task_type,report.*
FROM daily_tasks AS tasks
LEFT JOIN daily_task_reports AS report ON tasks.task_id=report.task_id
WHERE 1 ORDER BY report.task_date DESC) as tab GROUP BY tab.d_task_id) AS dailyTasks
LEFT JOIN duration_types AS type ON dailyTasks.task_type=type.type_id
WHERE DATEDIFF(CURDATE(),dailyTasks.task_date)>=type.duration_time"
請人幫忙,我堅持在本節
謝謝你的回答,但這不是我想要的方式,我認爲這是因爲三選擇查詢需要更多的執行時間,我還想包括日曆,排除節假日 –
@BasilPJoy更新我的答案你的給定的查詢也可以與單個s一起工作elect語句 –
這將工作,它會列出所有的任務,我只想要最後更新的任務,我也必須排除日曆中的日期那些有假期,Ajeeth,我給我的查詢只是爲了解釋我在嘗試 –