javascript - SQL - 选择具有默认值的时间段上的数据

标签 javascript mysql sql date select

我想从表中选择数据,在 JavaScript 中获取结果并将其打印在图表中(x = 日期,y = 数字)

我有以下 DATA 表(注意:我试图将它放在 markdown 中,因此它显示为 HTML 表,但它似乎不起作用):

| date    | number |
|---------|--------|
| 2015-01 | 12     |
| 2015-02 | 7      |
| 2015-04 | 4      |

和以下 SQL 选择:

SELECT date_format(date, '%Y-%m') AS date, number
FROM DATA
WHERE date >= '2015-01' AND date <= '2015-05'
GROUP BY date
ORDER BY date;

这给了我与输出完全相同的表格。但是,如果没有记录月份,我想要的是每个月用 0 一行。比如数据库中没有记录三月,所以我要的结果:

| date    | number |
|---------|--------|
| 2015-01 | 12     |
| 2015-02 | 7      |
| 2015-03 | 0      |
| 2015-04 | 4      |
| 2015-05 | 0      |

表格转到 5 月,因为在 SELECT 中我想要 1 月到 5 月之间的每个月。

问题是:有没有办法在 SQL 中执行此操作,或者我是否必须在 JavaScript 中对结果进行后处理以在我的最终表中添加空月份?

谢谢你的帮助


编辑:开始日期和结束日期是可变的,可以涵盖几年。所以,我想可以用一个包含月份的特殊表格来做一些事情,但我不知道如何...... 如果答案是后处理,那还可以(令人失望但还可以^^)


edit2:问题是@mauro 所说的“间隙填充”。它在 MySQL 中看起来相当复杂,所以我将对我的请求进行后处理。

参见 How to fill date gaps in MySQL?

最佳答案

我将创建第二个表DATA2,其中每月一行 且数字为零。然后,而不是选择:

FROM DATA

我会选择:

FROM ( SELECT * FROM DATA UNION ALL SELECT * FROM DATA2 ) D

这样...如果 DATA 包含给定月份的值,您将从 DATA 获得总计,如果不...您将从 DATA2 获得零

关于javascript - SQL - 选择具有默认值的时间段上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383380/

相关文章:

javascript - 如何使 datetime 列在 ms excel 上正确显示?

javascript - 如何在 javascript 中为每个分组对象添加新键值?

php - 使用数据库中的值填充单选按钮

MySQL - SELECT 查询 - 最旧和最年轻的日期

java - 避免在循环中执行数据库查询

mysql - 根据值对行进行分组并插入到另一个表中

javascript - 检查一个键是否已关闭?

javascript - omdb api 无结果

php - Web 和 DB 服务器之间的开放连接数量极大

java - 将Java连接到MySQL数据库