随时间检索和绘制数据

| 我一次又一次地遇到这个问题。 情况 有一个(大)数据集,其中的记录与日期(甚至时间)相关联,我需要随时间绘制此数据。 问题 数据集仅包含有可用记录的日期(显然),但是我还需要“空”日期,以便能够随时间平均绘制多个序列。 工具类 我通常使用MySQL和PHP,最经常将数据粘贴到Excel中以绘制图形等。 解决方法 到目前为止,我通常会创建一个excel工作表,然后手动输入日期,并使用数据集上的SumIf确定合适的结果数。 不过,这对我来说似乎有点愚蠢,并且在处理大量记录时并不是真的可行(excel很快就变得非常慢)。 我真的很想知道是否没有一个\'real \'和更好的解决方案来做到这一点,也许已经在查询的构造中了?     
已邀请:
        Excel数据文本中的日期看起来像日期还是日期序列号的格式设置为显示为日期? 如果日期数据点是日期序列号,则该图将使X轴在时间上均匀分布,而与各个数据点之间的间隔无关 附件中的图像会出现歧义:第一列和绘图以\“ Dates \”形式存储为文本,第二个日期序列号格式为日期     
        一个显而易见的解决方案是创建一个包含该范围内每个日期的表,然后选择与此连接的数据:
  CREATE TABLE days ( day DATE NOT NULL, PRIMARY KEY day );
  INSERT INTO days (day) VALUES (20110101);
  INSERT INTO days (day) VALUES (20110102);
  ....
  SELECT days.day, yourtable.*
  FROM days LEFT JOIN yourtable
     ON days.day=yourtable.day;
另外,您也可以使用PHP注入缺少的日子(但我认为jupaju的代码相当有缺陷):
  // ensure your qry returns DATE_FORMAT(day, \'%Y-%m-%d\') AS day
  $lastday=\'\';
  while ($r=mysql_fetch_assoc($qry_result)) {
      if (!$lastday) $lastday=$r[\'day\'];
      while ($r[\'day\']>$lastday) {
          print $lastday . \"\\n\";
          $lastday=add_day($lastday);
      }
      unset($r[\'day\']);
      print $lastday . \',\' . implode(\',\', $r) . \"\\n\";
  }

  function add_day($day)
  {
     list($yr, $mo, $da)=explode(\'-\',$day);
     $t=mktime(4,0,0,$mo, $da, $yr)+24*60*60; // NB not all days are 24 hours
     return date(\'Y-m-d\',$t);
  }
    
        使用PHP我会做这样的事情(假设db-results在
$res
中,日期以
Y-m-d
作为键):
$year = date(\'Y\');
for ($month = 1; $month <= 12; $month++) {
    $last_day = date(\'t\', mktime(0, 0, 0, 1, $month, $year));
    for ($day = 1; $day <= $last_day; $day++) {
        $key = sprintf(\'%4d-%02d-%02d\', $year, $month, $day);
        if (!empty($res[$key])) {
            $output[$key] = $res[$key];
        } else {
            $output[$key] = 0;
        }
    }
}
这样,您将获得一个数组
$output
,其中包含日期值为ѭ6empty的空日期。     

要回复问题请先登录注册