2017-10-06 102 views
1

我想知道是否有辦法解決這個問題。MySQL。月底開始新行

所以我的行有一個類型爲日期的列,每天增加1天(直到相應的月份結束)。在新的月份開始時,必須生成一個新行,並且更新將再次開始,直到當月的時間,以此類推。等等。

+1

什麼原因導致日期每天增加? –

+1

你如何創建最初的行?我想你必須用你的編程語言而不是sql來捕捉它。 –

+0

你好,我正在使用ETL,Talend。在tMysqlInput中,我有一個CURDATE()函數,它每天增加它,因爲這個工作被編程爲每天晚上運行。 –

回答

0

下面是一種思考MySQL SQL方言中問題的方法。

首先,您需要一個將datestamp更改爲每個月唯一的值的函數。那是LAST_DAY(datestamp)。它從任意輸入生成DATETIME值,如2017-09-30 00:00:00

接下來,您可以利用MySQL的INSERT ... ON DUPLICATE KEY UPDATE功能。您將創建一個表months有,比方說,這些列

month_ending DATETIME 
    category  VARCHAR(20) 
    sum_of_input INT 

然後你讓month_ending, category成一個獨特的複合索引。

然後,你做這樣的事情

INSERT INTO months     /* warning! not debugged! */ 
     (month_ending, category, sum_of_input) 
VALUES (LAST_DAY(?date), ?category, ?value) 
ON DUPLICATE KEY 
UPDATE months 
    SET sum_of_input = sum_of_input + ?value 
    WHERE month_ending=LAST_DAY(?date) 
    AND category=?category 

但是,這有一個很大的特點,很難調試,頸項強痛。在ETL系統中使用功能來完成工作總結會更有意義。