根据T-Sql中的日期范围取列的总和

时间:2013-09-02 09:28:48

标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2

我有一个名为Work Done的专栏,每天都会开展一些工作。它有列

Id,VoucherDt,Amount

现在我的报告有打印到月份日期之前的金额总和的方案。例如,如果当前日期是2013年9月3日,则查询将选择9月1日,2日和3日的所有记录并返回其总和。 我能够获得当月的第一个日期。我正在使用以下条件

VoucherDt between FirstDate and GetDate()但它没有给出理想的结果。所以请建议我适当的where条件。

3 个答案:

答案 0 :(得分:1)

我认为可能有更好的解决方案,但这应该有效:

where YEAR(VoucherDt) = YEAR(CURRENT_TIMESTAMP) 
and MONTH(VoucherDt) = MONTH(CURRENT_TIMESTAMP)
and  DAY(VoucherDt) <= DAY(CURRENT_TIMESTAMP)

答案 1 :(得分:1)

SELECT SUM(AMOUNT) SUM_AMOUNT FROM <table>
WHERE VoucherDt >= DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP), 0)
AND VoucherDt < DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 1)

答案 2 :(得分:0)

尝试计算从您可以在日期时间和目标日期存储的第一个日期开始的月数。

SELECT SUM(amount)
FROM
(
    SELECT 100000 AS amount, '2013-09-03' AS dt
    UNION ALL SELECT 10000,  '2013-09-02'
    UNION ALL SELECT 1000,   '2013-09-01'
    UNION ALL SELECT 100,    '2013-08-02'
    UNION ALL SELECT 10,     '2013-01-31'
    UNION ALL SELECT 2,      '2012-09-03'
    UNION ALL SELECT 2,      '2012-09-02'
    UNION ALL SELECT 1,      '2012-09-01'
) SourceData
WHERE DATEDIFF(m, '1900-1-1', GETDATE()) = DATEDIFF(m, '1900-1-1', SourceData.dt)
相关问题