使用mysql选择数据
例如,如果我有一个这样的表,
total date
10 2010-01-01
15 2010-01-02
98 2010-01-03
50 2010-01-05
我该如何编写 select 语句来获得这样的输出?
total date
10 2010-01-01
15 2010-01-02
98 2010-01-03
0 2010-01-04
50 2010-01-05
for instance if I have a table like this
total date
10 2010-01-01
15 2010-01-02
98 2010-01-03
50 2010-01-05
how can I write select statement to get output like this?
total date
10 2010-01-01
15 2010-01-02
98 2010-01-03
0 2010-01-04
50 2010-01-05
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MySQL 没有递归功能,因此您只能使用
NUMBERS
表技巧 -创建一个仅保存递增数字的表 - 使用 auto_increment 很容易做到:
使用以下方式填充表:
...您需要的任意多个值。在这种情况下,INSERT 语句需要运行至少 31 次。
使用DATE_ADD 构造一个天数列表,根据
NUMBERS.id
值增加:<前><代码>选择 x.dt
FROM (SELECT DATE(DATE_ADD('2010-01-01', INTERVAL (n.id - 1) DAY)) AS dt
从数字 n
WHERE DATE_ADD('2010-01-01', INTERVAL (n.id - 1) DAY) <= '2010-01-05' ) x
使用 OUTER JOIN 获取所需的输出:
<前><代码>选择x.dt,
COUNT(*) AS 总计
FROM (SELECT DATE(DATE_ADD('2010-01-01', INTERVAL (n.id - 1) DAY)) AS dt
从数字 n
WHERE DATE_ADD('2010-01-01', INTERVAL (n.id - 1) DAY) <= '2010-01-05' ) x
LEFT JOIN YOUR_TABLE y ON y.date = x.dt
按 x.dt 分组
按 x.dt 排序
为什么是数字,而不是日期?
简单 - 可以根据数字生成日期,就像我提供的示例一样。它还意味着使用单个表,而不是每种数据类型一个表。
MySQL doesn't have recursive functionality, so you're left with using the
NUMBERS
table trick -Create a table that only holds incrementing numbers - easy to do using an auto_increment:
Populate the table using:
...for as many values as you need. In this case, the INSERT statement needs to be run at least 31 times.
Use DATE_ADD to construct a list of days, increasing based on the
NUMBERS.id
value:Use an OUTER JOIN to get your desired output:
Why Numbers, not Dates?
Simple - dates can be generated based on the number, like in the example I provided. It also means using a single table, vs say one per data type.