我想运行一个类似的查询
select ... as days where `date` is between '2010-01-20' and '2010-01-24'
Run Code Online (Sandbox Code Playgroud)
并返回如下数据:
days ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24
我正在从一个mysql表构建一个快速的csv,其查询如下:
select DATE(date),count(date) from table group by DATE(date) order by date asc;
Run Code Online (Sandbox Code Playgroud)
并通过以下方式将它们转储到perl中的文件:
while(my($date,$sum) = $sth->fetchrow) {
print CSV "$date,$sum\n"
}
Run Code Online (Sandbox Code Playgroud)
但是数据中存在日期差距:
| 2008-08-05 | 4 |
| 2008-08-07 | 23 |
Run Code Online (Sandbox Code Playgroud)
我想填充数据以填写零计数条目的缺失日期,最终得到:
| 2008-08-05 | 4 |
| 2008-08-06 | 0 |
| 2008-08-07 | 23 |
Run Code Online (Sandbox Code Playgroud)
我把一个非常笨拙(几乎肯定是错误的)的解决方法打包在一起,每个月都有一些日数和一些数学,但是在mysql或perl方面必须有更直接的东西.
面对为什么我这么愚蠢的任何天才想法/拍打?
我最终使用了一个存储过程,该过程为所讨论的日期范围生成临时表,原因如下:
perl Date/DateTime迭代答案也非常好,我希望我能选择多个答案!
我需要显示每年和每月的"订单"总数.但有几个月没有数据,但我想显示那个月(总值为零).我可以用每年12条记录创造一个可靠的'月',但是有没有办法在不引入新表的情况下获得一系列月份?
就像是:
SELECT [all year-month combinations between january 2000 and march 2011]
FROM DUAL AS years_months
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?你可以使用SELECT和某种公式来"动态创建"数据吗?!
更新:
自己发现: 从日期范围生成天数
这个问题中接受的答案是我正在寻找的.也许不是最简单的方法,但它可以做我想要的:根据公式填充数据选择....
在过去十年的所有月份中"创建"一张桌子:
SELECT CONCAT(MONTHNAME(datetime), ' ' , YEAR(datetime)) AS YearMonth,
MONTH(datetime) AS Month,
YEAR(datetime) AS Year
FROM (
select (curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) MONTH) as datetime
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union …Run Code Online (Sandbox Code Playgroud)