[編輯]看起來我的查詢大部分都是正常的 - 但有些東西缺失導致某些側ID被計入循環中或其他東西。我懷疑這個問題是出現在左側的連接處,但我很難搞清楚。MySQL - 從兩個表中獲取兩個計數,並將它們分組到另一個列
我有三個表(Pre
,Post
,Schedule
),我想從表Pre
和表Post
獲得行的計數,並且有結果組根據現場ID都算作不同的列(這是常見跨所有三個表)如果該ID的安裝日期與我的查詢匹配。以下是我正在處理的內容:
Table 'Pre'
site | timestamp
-------------------------
0101 | 2016-01-01 13:00
0101 | 2016-01-01 12:00
3345 | 2016-01-01 12:30
6500 | 2016-01-01 16:00
6500 | 2016-01-01 11:00
0101 | 2016-01-01 18:00
Table 'Post'
site | timestamp
-------------------------
0101 | 2016-01-02 03:00
0101 | 2016-01-02 02:00
6500 | 2016-01-02 01:00
0101 | 2016-01-02 08:00
0101 | 2016-01-02 05:30
8888 | 2016-12-31 12:30
Table 'Schedule'
site | install_date
------------------------
0101 | 2016-01-01
3345 | 2016-01-01
6500 | 2016-01-01
8888 | 2015-12-29
Desired Query Result:
site | install_date | pre | post
-------------------------------------
0101 | 2016-01-01 | 3 | 4
3345 | 2016-01-01 | 1 | 0
6986 | 2016-01-01 | 2 | 1
而這裏是我嘗試過的查詢,但我得到的結果不準確。
SELECT t1.`site`, t1.`install_date`, SUM(CASE WHEN t2.`timestamp` >= NOW() - INTERVAL 1 DAY THEN 1 ELSE 0 END) as 'pre',
SUM(CASE WHEN t3.`timestamp` >= NOW() - INTERVAL 1 DAY THEN 1 ELSE 0 END) as 'post'
FROM `Schedule` t1
LEFT JOIN `Pre` t2 ON t1.`site` = t2.`site`
LEFT JOIN `Post` t3 ON t1.`site` = t3.`site`
WHERE t1.`install_date` = CURDATE() - INTERVAL 1 DAY
GROUP BY t1.`site`
招'where'條件到'join'條款。 –
我認爲't1.install_date'也應該進入group by子句 –
@vkp - 移動where子句時出現錯誤。我嘗試將它添加到一個和兩個'LEFT JOIN'。 –