我运行的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或类似名称。 –