SQL/VBA: How to group by a fiscal year starting from a day other than 1st day of month

后端 未结 2 381
清酒与你
清酒与你 2021-01-29 14:19

I’m trying (using MS Access) to group some data by a fiscal year, which can be different to the calendar year.

If every fiscal year always started on the 1st of a given

相关标签:
2条回答
  • 2021-01-29 15:01

    This is actually quite simple, and you don't need any additional table or fields.

    The method is to offset the financial dates to match the calendar year. For example:

    FinancialYearFirstMonth = 9
    FinancialYearFirstDay = 2 
    

    First, toalign to primo of the month:

    DateMonth = DateAdd("d", 1 - FinancialYearFirstDay, SomeDate)
    

    Next, expand to also align to primo of the year:

    DateYearMonth = DateAdd("m", 1 - FinancialYearFirstMonth, DateAdd("d", 1 - FinancialYearFirstDay, SomeDate))
    

    If the financial year is not lagging but leading the calendar year, add 12 months:

    DateYearMonth = DateAdd("m", 1 - FinancialYearFirstMonth + 12, DateAdd("d", 1 - FinancialYearFirstDay, SomeDate))
    

    Now you can have the financial year and month and (with some limitations for the ultimo date(s) of a month) day using the normal functions:

    FinancialYear = Year(DateYearMonth)
    FinancialMonth = Month(DateYearMonth)
    FinancialDay = Day(DateYearMonth)
    

    Of course, month names will not fit. If these are needed, use MonthName of the original date.

    0 讨论(0)
  • 2021-01-29 15:08

    If you have month + day to take into consideration, then obviously you will need the corresponding 2 fields in your table (NOT NULL DEFAULT 1).

    Once this is added, the following will calculate the year: year(orderDate) - IIF(dateserial(year(orderDate), startFYofaCompany_month, startFYofaCompany_day) > orderDate, 1, 0)

    Add this to the 2 places you have prepared in your query.

    0 讨论(0)
提交回复
热议问题