Создание ежемесячного итога за последние 12 месяцев - PullRequest
3 голосов
/ 06 марта 2009
CurrentMonth = Month(CurrentDate)
CurrentYear = Year(CurrentDate)

    SQL = "SELECT Spent, MONTH(Date) AS InvMonth, YEAR(Date) As InvYear FROM Invoices WHERE YEAR(Date) = '" & CurrentYear & "' AND MONTH(Date) = '" & CurrentMonth & "'"
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText
    Do Until RecordSet.EOF
        MTotal(i) = MTotal(i) + RecordSet.Fields("Spent")
        RecordSet.MoveNext
    Loop
    RecordSet.Close

Это код, который мне в настоящее время требуется для подведения итогов за месяц. Я хочу расширить это, чтобы получить итоговые данные за месяц за последние 12 месяцев.

Способ, которым я вижу, состоит в том, чтобы выполнить цикл в обратном направлении через значение CurrentMonth, а если значение CurrentMonth достигает 0, откатить значение CurrentYear назад 1. Используя переменную цикла (i), построить массив из 12 значений: MTotal ()

Что вы, ребята, думаете?

Ответы [ 4 ]

1 голос
/ 06 марта 2009

Я бы справился с этим, «округлив» дату до месяца, а затем сгруппировав по этой дате месяца и получив сумму потраченных средств:

 SELECT SUM(Spent) AS [TotalSpent],
        DATEADD(Month, DATEDIFF(Month, 0, [Date]), 0) AS [MonthDate]
 FROM   Invoices 
 WHERE      [Date] >= '20080301'
        AND [Date] <  '20090301'
 GROUP BY DATEADD(Month, DATEDIFF(Month, 0, [Date]), 0)
 ORDER BY [MonthDate]

[МесяцДата] может быть отформатирован для отображения Месяца / Даты приблизительно или в отдельных столбцах.

Параметр WHERE может быть параметризован для обеспечения подходящего диапазона записей для включения

1 голос
/ 06 марта 2009

Группа должна помочь вам в пути.

SELECT TOP 12
  SUM(Spent) AS Spent
  , MONTH(Date) AS InvMonth
  , YEAR(Date) AS InvYear
FROM
  Invoices
GROUP BY
  YEAR(Date), MONTH(Date)
WHERE DATEDIFF(mm, Date, GETDATE(()) < 12

DATEDIFF от Josh's - лучшее решение, чем мой оригинальный TOP, и ORDER BY

0 голосов
/ 06 марта 2009

Решение, которое я придумал, было бы:

For i = 0 To 11
    If CurrentMonth = 0 Then
        CurrentMonth = 12
        CurrentYear = CurrentYear - 1
    End If

    SQL = "SELECT Spent, MONTH(Date) AS InvMonth, YEAR(Date) As InvYear FROM Invoices WHERE YEAR(Date) = '" & CurrentYear & "' AND MONTH(Date) = '" & CurrentMonth & "'"
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText
    Do Until RecordSet.EOF
        MTotal(i) = MTotal(i) + RecordSet.Fields("Spent").Value
        RecordSet.MoveNext
    Loop
    RecordSet.Close

    CurrentMonth = CurrentMonth - 1
Next

Я считаю, что это должно работать как ожидалось. Однако я с нетерпением жду возможности увидеть, какие решения вы, ребята, можете найти, или если кто-нибудь обнаружит проблему с ym fix.

0 голосов
/ 06 марта 2009

Единственная проблема с этим заключается в том, что мне требуется месячная сумма, за каждый из последних 12 месяцев, а не сумма за последние 12 месяцев. В противном случае я вижу, что лучше будет улучшить SQL, а не использовать код vb6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...