2011-07-19 32 views
0

我有以下查詢是拉數據罰款。它目前按月份和年份分組數據。我試圖將月度數據從一個月的第19個月分組到第二個月的第18個月,以便它符合我們的財務月份而不是ca月。這可能嗎?MySQL在集團中的抵消日期由

SELECT 
    sum(invoice.invoice_amount_payable)AS invoice_totals, 
    company.company_label AS company_label, 
    MONTHNAME(invoice.invoice_date_paid)AS MONTH, 
    YEAR(invoice.invoice_date_paid)AS YEAR 
FROM 
    invoice 
INNER JOIN company ON invoice.company_id = company.company_id 
WHERE 
    invoice.invoice_active = 1 
AND invoice.invoice_status_id = 7 
AND invoice.invoice_date_deleted = 0 
AND invoice.invoice_date_paid >= '2009-1-1' 
AND invoice.invoice_date_paid <= '2011-8-20' 
GROUP BY 
    MONTH(invoice.invoice_date_paid), 
    YEAR(invoice.invoice_date_paid) 
ORDER BY 
    YEAR(invoice.invoice_date_paid), 
    MONTH(invoice.invoice_date_paid) 
+1

可以在一組,由參數,所以'集團做任意的計算通過IF(...日期偏移量計算...,1,0)'會起作用。 –

+0

@Marc B - 你能否稍微解釋一下,我能否以這種方式將我所有的月份分組。所以我最終會說24個不同的團體兩年?謝謝。 – Joseph

+0

創建一個計算財年/月的UDF。然後,您可以執行一個簡單的「GROUP BY財務(invoice_date_paid)」,並根據您的會計年度自動創建適當的年/月分組。有關UDF的詳細信息,請訪問:http://dev.mysql.com/doc/refman/5.1/en/create-function-udf.html。您可以直接在查詢中進行財務計算,但很可能您希望在其他地方重新使用它,所以UDF是可取的。 –

回答

0

使用MySQL的年月功能,您可以將您的發票一天像所需的偏移根本轉變:

invoice_date_paid + INTERVAL 19 DAY 
+0

當然,這不會正確分組他們嗎?它只會在每個日期添加19天。所以說,在2月14日的時候,我想把它歸入一月份的月份,這個月份應該在1月19日至2月20日之間運行。這段時間不會簡單地加上19天,將它移到3月份的類別中嗎? – Joseph

+0

'+ 19'只是爲了給你這個想法。在你的情況下,你應該減去,例如Jan19-Feb18減去18天= Jan1-Jan31。在你的「GROUP BY」子句中使用它。我不知道你是否想要在結果中轉換實際付款日期,所以你可能不會在'SELECT ...'中使用它。 – arnep