我有一个名为Work Done的专栏,每天都会开展一些工作。它有列
现在我的报告有打印到月份日期之前的金额总和的方案。例如,如果当前日期是2013年9月3日,则查询将选择9月1日,2日和3日的所有记录并返回其总和。 我能够获得当月的第一个日期。我正在使用以下条件
VoucherDt between FirstDate and GetDate()
但它没有给出理想的结果。所以请建议我适当的where
条件。
答案 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)