我想知道有没有办法解决这个问题。
所以我的行有一个日期类型的列,每天增加 1 天(直到相应月份的月底)。在新月份的开始,必须生成一个新行,并且更新将再次开始,直到那个月的和,依此类推。
最佳答案
这是一种思考 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 系统内部的功能来完成这种汇总工作更有意义。
关于MySQL。在月末开始新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46602231/