我想獲得一個查詢,將返回與某一時刻的範圍內讀取總(在working_hours
表中定義)的結果集的具體日期小時範圍內的行取決於DAYOFTHEWEEK
與一個日期結果,看起來像:MySQL的 - 使用DAYOFWEEK
working | nonworking | weekend | date | group_id
-----------------------------------------------------------------
50.3 | 30.8 | 0 | 2015-04-01 00:00 | 7
40.3 | 60.8 | 0 | 2015-04-01 00:00 | 8
50.3 | 30.8 | 0 | 2015-04-02 00:00 | 7
40.3 | 60.8 | 0 | 2015-04-02 00:00 | 8
工作和週末範圍存儲在數據庫中working_hours
,非工作時間範圍是隱含的(當天基本上NOT BETWEEN
其它範圍)
的表格如下:
讀數表有每小時讀數,命名爲readings
group_id | reading | datestamp
------------------------------------------------------
7 | 30.8 | 2015-04-01 00:00
7 | 20.2 | 2015-04-01 01:00
7 | 11.2 | 2015-04-02 00:00
7 | 20.2 | 2015-04-02 01:00
8 | 26.2 | 2015-04-01 00:00
8 | 30.2 | 2015-04-01 01:00
8 | 26.2 | 2015-04-02 00:00
8 | 30.2 | 2015-04-02 01:00
小時〜存儲在working_hours
表,天塔是DAYOFTHEWEEK
格式(1 =週日,2 =週一等):
group_id | day | range_start | range_end | range_type_id | day_type_id
------------------------------------------------------------------------------
7 | 5 | 08:00:00 | 15:59:00 | 1 | 1
7 | 6 | 00:00:00 | 05:59:00 | 1 | 2
7 | 6 | 06:00:00 | 23:59:00 | 2 | 2
7 | 1 | 00:00:00 | 22:59:00 | 2 | 4
7 | 1 | 23:00:00 | 23:59:00 | 1 | 4
表類型在working_hours_day_type
表中,對於我來說事情變得複雜,平日和週末只有一個範圍,但開始/結束週末有兩個範圍('開始週末'的第一個範圍是工作時間,第二個範圍的週末時間和'結束週末'第一個RA nge是週末時間,第二個工作時間範圍)。
id | type
------------------
1 | Weekday
2 | Start Weekend
3 | Weekend
4 | End Weekend
範圍類型在working_hours_range_type
表:
id | type
------------------
1 | Working
2 | Weekend
我的MySQL的知識僅限於簡單SELECT
,INSERT
等和JOIN
S中的基礎 - 我已經發現了約HOUR(datestamp) BETWEEN 8 AND 14
但不知道如何讓子查詢使用WHERE datestamp BETWEEN '2015-04-01 00:00:00' AND '2015-04-02 23:59:00'
母查詢中遍歷如果事實上那它怎麼做...
對不起,你失去了我。這看起來像是一個過於複雜的設計 - 或者我錯過了什麼?如果列與問題無關,請不要包含它們。 – Strawberry
am歡迎到簡化這個任何建議,我需要使用的指定範圍內的日常故障('讀數SUM')。如果4月1日是星期天,那麼請查看'working_hours'獲取星期日特有的任何範圍,並將它們應用到當天的讀數中以獲得總和。 – GPO
您不需要額外的表格 - 您可以在第一次選擇時使用幾個CASE語句完成所有操作。 – bf2020