【问题标题】:GROUP BY date with no leaks SQL on MySQL 5.1 [duplicate]MySQL 5.1上没有泄漏SQL的GROUP BY日期[重复]
【发布时间】:2011-09-07 14:57:25
【问题描述】:

可能重复:
What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?

创建表:

CREATE TABLE `trb3` (
  `value` varchar(50) default NULL,
  `date` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 


SELECT date, SUM(value) AS value FROM trb3 GROUP BY date ORDER BY date DESC

但是

  Jun 30 2011,100
  Jun 29 2011,90
      .
      .
  Jun 10 2011,90
  Jun 02 2011,89
  Jun 01 2011,10

为什么没有显示 Jun 03 的数据?

如何解决这个问题。

【问题讨论】:

  • 您有 6 月 3 日的数据吗?否则,6 月 3 日将不会出现在结果中 - 只会出现实际数据
  • 不,我没有 Jun 03 的数据,但我想获得“0”数据

标签: mysql sql mysql5 mysql-5.1


【解决方案1】:

你需要得到一个你想要的日期列表,然后加入它:

create table my_dates (my_date date not NULL);

然后用您想要数据的日期填充 my_dates:

insert into my_dates values ('2011-06-01'), ('2011-06-02'), ...;

然后

select my_dates.date, SUM(value)
from my_dates left join trb3 on trb3.date = my_dates.my_date
group by 1;

编辑: 仅供参考,这不是临时表,而是永久表。

【讨论】:

  • 非常感谢。但我不想创建表。我可以不用临时表解决吗?
  • @freddiefujiwara:如果你不想用临时表解决这个问题,那就用持久表来解决。在许多不同的情况下,数字表可能会派上用场。您可以创建一个并在此特定问题中使用它来创建与您的条件匹配的范围内的连续日期列表。
  • 是的,还有其他方法可以解决这个问题——只是碰巧这是正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多