我有一张my_table号桌,类似于:

id    start_date    end_date   
1     2019-12       2021-12
2     2017-11       2019-03
3     2016-09       2018-09

我还有另外date_values张类似于每个日期的桌子:

date_value
2016-09
2016-10

我想得到每个月的yields :

month      num_people
2016-09    1
2016-10    1

我该怎么做呢?

我知道我需要按月分组,然后按计数(id)进行聚合,但我不确定如何以我需要的格式获取日期.非常感谢您的帮助,谢谢!

推荐答案

您可以try 使用BETWEEN在日期范围内设置JOIN,但您的DateTime不是有效的格式,我们需要使用STR_TO_DATE函数将字符串转换为DateTime,然后进行比较

Query 1:

    SELECT t2.date_value,COUNT(*) num_people
    FROM my_table t1
    INNER JOIN date_values t2
    ON STR_TO_DATE(CONCAT(t2.date_value,'-01'), '%Y-%m-%d')
    BETWEEN STR_TO_DATE(CONCAT(t1.start_date ,'-01'), '%Y-%m-%d')
    AND STR_TO_DATE(CONCAT(t1.end_date ,'-01'), '%Y-%m-%d')
    GROUP BY t2.date_value

100:

| date_value | num_people |
|------------|------------|
|    2016-09 |          1 |
|    2016-10 |          1 |

我建议date_valuestart_dateend_date可能是日期时间类型,而不是字符串类型.

如果你想以yyyy-MM格式显示DATE_FORMAT个数据,我们可以使用DATE_FORMAT函数.

SELECT DATE_FORMAT(now(),'%Y-%m') 

Mysql相关问答推荐

根据当前表列的值,从SQL中的另一个表中获取数据

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

比较2个mysql json数据类型列

Ballerina SQL 中是否也应该考虑输入清理?

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

按唯一列排序,但保持匹配的列在一起

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

SQL:如何为给定组中的所有记录 Select 一列与另一列不匹配的位置

如何编写按天数汇总值的sql查询?

计算MySQL中的连续出现

MYSQL 删除两个已知字符串之间的字符串

MySQL - 单词边界的正则表达式,不包括下划线(连接标点符号)

MySQL 根据另一列中的值更改空值

如何在任何连续范围内获得最大值

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

加快 mysql 转储和导入

从另一个表中 Select 具有 id 的行

获得上个月的第一天和最后一天的最佳方式?

MySQL 中的 UNIQUE 索引是否区分大小写?