MySQL。在月末开始新行

标签 mysql date intervals talend

我想知道有没有办法解决这个问题。

所以我的行有一个日期类型的列,每天增加 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/

相关文章:

unix - 如何在给定的时间间隔内运行 Unix 命令?

mysql - 如何从 MySQL 高分板中获取每场比赛的前 5 名球员?

php - 通过 PHP 在数据库中上传照片时遇到困难

php - 如何修复这个重复的 key ?

mysql - SQL - MySQL - 如何仅获取与某一列具有相同值的记录

javascript - dstore 过滤日期范围

java - findbugs 消息 : Method call passes null for unconditionally dereferenced parameter

php - 使用 PHP 在 MySQL 中获取日期,但它似乎不起作用

c++ - 如何获得耗时百分比?

algorithm - 将双舍入到算术级数的最近成员?