2

私は Work Done と呼ばれるコラムを持っており、日常的にいくらかの作業が行われています。列があります

ID、VoucherDt、金額

今、私のレポートには、その月の日付までの金額の合計を印刷するシナリオがあります。たとえば、現在の日付が 2013 年 9 月 3 日の場合、クエリは 9 月 1 日、2 日、3 日のすべてのレコードを選択し、その合計を返します。今月の最初の日付を取得できます。そして、私は次の条件を使用しています

VoucherDt between FirstDate and GetDate()しかし、それは望ましい結果を与えません。親切に私に適切なwhere条件を提案してください。

4

3 に答える 3

1

より良い解決策があるかもしれないと思いますが、これはうまくいくはずです:

where YEAR(VoucherDt) = YEAR(CURRENT_TIMESTAMP) 
and MONTH(VoucherDt) = MONTH(CURRENT_TIMESTAMP)
and  DAY(VoucherDt) <= DAY(CURRENT_TIMESTAMP)
于 2013-09-02T09:33:16.157 に答える
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)
于 2013-09-02T10:02:29.237 に答える
0

datetime とターゲット日付に格納できる最初の日付からの月数を計算してみてください。

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)
于 2013-09-02T09:59:20.473 に答える