我運行的PostgreSQL 9.4和具有以下表結構的發票:SQL SUM和GROUP BY基於WHERE子句
id BIGINT, time UNIX_TIMESTAMP, customer TEXT, amount BIGINT, status TEXT, billing_id TEXT
我希望我能正確地解釋我的挑戰。
發票記錄可以有2個不同的狀態; begin
,ongoing
和done
。 隨着時間的推移,多個發票記錄可以成爲同一發票行的一部分。
因此,當發票期開始時,記錄開始時的狀態爲begin
。 然後每6小時會產生一個新的記錄,其狀態爲ongoing
,其中包含amount
中的當前金額支出。 發票關閉時,會生成狀態爲done
的記錄,並在欄位amount
中的總金額支出中生成。同一發票內的所有發票記錄包含相同的billing_id
。
要calcuate一個客戶目前的開支,我可以運行以下命令:
SELECT sum(amount) FROM invoice_records where id = $1 and time between '2017-06-01' and '2017-07-01' and status = 'done'
但是,如果有一個持續的發票中尚未關閉,不考慮。
我怎樣才能算出最大的billing_id沒有狀態done
?
希望它有道理。
如果每個'id'只有一個'status ='done'',你爲什麼要做sum()?不僅僅是'SELECT amount FROM'還是我錯過了什麼? –
在我的示例中,我總結了特定客戶的所有發票(「d')。 –
您在此表中稱客戶ID爲ID?你不應該。稱爲ID的列應該唯一標識表中的記錄。如果您需要該表中的客戶ID,請將其稱爲customer_id或類似名稱。 –