Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询日期范围之间的总金额_Sql - Fatal编程技术网

SQL查询日期范围之间的总金额

SQL查询日期范围之间的总金额,sql,Sql,问题:我想返回在生成第一张发票后的前15天内创建的发票的总金额 发票表: ClientID InvoiceDate InvoiceAmt -------- ----------- ---------- 150 1/15/2012 150 150 1/25/2012 1200 150 2/10/2012 800 250 1/12/2012 950 250 1/26/2012 1050 250

问题:我想返回在生成第一张发票后的前15天内创建的发票的总金额

发票表:

ClientID  InvoiceDate  InvoiceAmt
--------  -----------  ----------
150       1/15/2012    150
150       1/25/2012    1200
150       2/10/2012    800
250       1/12/2012    950
250       1/26/2012    1050
250       2/05/2012    1250
400       1/10/2012    500
400       1/26/2012    700

因此,为每个发票创建的第一张发票如下所示:

150 = 1/15/2012
250 = 1/12/2012
400 = 1/10/2012

现在我想计算从初始发票日期算起的15天。因此,计算结果应返回:

150 = 1/30/2012
250 = 1/27/2012
400 = 1/25/2012

现在,我希望查询对适当日期范围的InvoiceAmt求和

150 = 1350
250 = 2000
400 = 500

有什么想法吗?

您可以使用以下方法(请参阅):


您使用的是什么RDBMS和版本?一般来说,最好使用明确定义的范围,尤其是在日期的情况下-使用“包含下限,包含上限”。如果使用时间戳,尤其如此,因为尝试使用包含范围变得非常重要。@X-Zero true,这取决于数据。根据所给内容,时间戳没有问题。谢谢您的快速响应和解决我的问题。喜欢SQLFiddle@MichaelWSQLFiddle非常适合发布问题数据。
select i1.clientid
    , sum(invoiceamt) as Total
from invoice i1
inner join
(
    select clientid, min(invoicedate) mindate
    from invoice i
    group by clientid 
) i2
    on i1.clientid = i2.clientid
where i1.invoicedate between i2.mindate and dateadd(d, 15, mindate)
group by i1.clientid