我有以下查詢哪些工作(沒有「WHERE stats.dt」部分)。我獲得了所有用戶的數據。按WHERE子句選擇所有行
我的問題是,這個查詢當然會導致只有stats.dt> $ timestampnow- $ maxdays_data的用戶纔有行。但是我需要所有的用戶,但是當stats.dt大於tstamp-maxdays時,只需要獲取它們的SUM(upload)或SUM(download)值。如果stats.dt小於我需要的上傳和下載值的其他行可以忽略。
一個例子是,具有nodeid 2的用戶不會被選中,因爲他的dt太小。我確實希望用戶被選中,但沒有數據或上傳值(它們可以是0)。
的統計數據表看起來像這樣
nodeid | dt | upload | download
----------------------------------------
1 | 1381699533 | 345345 | 42324234
1 | 1382899152 | 7575 | 574234
1 | 1380699533 | 764534 | 7235232
2 | 1372899152 | 71455 | 124123
我不知道從哪裏開始尋找如何解決這個所以也許有人在那裏可以點我在正確的方向。謝謝!
SELECT b.id, b.lastname, b.name, c.balance, a.maxdebt, b.warndata, b.warndownload, b.warnupload, b.warndebt, b.cutoffdata, b.cutoffdownload, b.cutoffupload, b.cutoffdebt, b.data, b.download, b.upload, b.warning, b.access, b.cutoffstop
FROM (
SELECT customers.id AS id, SUM(tariffs.value) AS maxdebt
FROM tariffs
LEFT JOIN assignments ON tariffs.id = assignments.tariffid
RIGHT JOIN customers ON assignments.customerid = customers.id
GROUP BY id
) a
JOIN (
SELECT customers.id AS id, UPPER(lastname) AS lastname, customers.name AS name, SUM(stats.upload+stats.download) AS data, SUM(stats.download) AS download, SUM(stats.upload) AS upload, customers.cutoffstop, warndata, warndownload, warnupload, warndebt, cutoffdata, cutoffdownload, cutoffupload, cutoffdebt, nodes.warning, nodes.access
FROM customers
LEFT JOIN nodes ON customers.id = nodes.ownerid
LEFT JOIN stats ON nodes.id = stats.nodeid
LEFT JOIN customerwarnings ON customers.id = customerwarnings.id
WHERE stats.dt > ($timestampnow-$maxdays_data)
GROUP BY id
) b ON a.id = b.id
JOIN (
SELECT customerid, SUM(cash.value) AS balance
FROM cash
GROUP BY customerid
) c ON b.id = c.customerid
您可以對它使用SQL HAVING。 http://www.w3schools.com/sql/sql_having.asp – Dezigo