【问题标题】:MySQL Order By DateMySQL 按日期排序
【发布时间】:2014-06-27 11:54:49
【问题描述】:

我有一个 MySQL 数据库。我的数据库包含一个名为“created”的日期时间列的文档。我想按天分组,以便每天计算文档数。但是,有些日子有零文档,因此它们不是输出的一部分。例如,如果文档不存在,我需要 '2001-01-01' 的计数为零。

我正在考虑创建一个包含我感兴趣的日期范围的额外表格,并与我的表格进行外部联接。然后我可以按日期分组以获得我的结果。

有没有更好的方法来做这样的事情?

我的 SQL 代码:

Select date(created_at),c.text from Dates d left outer join classifier c on d.n=DATE(c.created_at)
    where c.classifier="2014streamlrall"
    and date(c.created_at)>='2014-03-01' and date(c.created_at)<='2014-05-01'
order by d.n;

左连接仍然不起作用。

【问题讨论】:

  • 您是对的,要在纯 SQL 中执行此操作,您将需要另一个表,其中包含所有日期
  • 我已经上传了我的查询,但它仍然不起作用。

标签: mysql


【解决方案1】:

MySQL 没有更好的方法。

它既缺少生成任意长度结果集的方法(类似于 PostgreSQL 的 generate_series),也缺少模拟这种方法所需的递归 SQL(用于 SQL Server 和 Oracle)。

即使在 SQL Server 上,使用生成的结果集填充和保存具有 100 年日期的表(仅需要 73K 多一点的记录)在类似于您的报表上的性能也比使用生成的结果集要好得多。

【讨论】:

    【解决方案2】:

    使用 '2001-01-01: 0' 创建一行是您真正的问题吗?如果是这样,只需使用 PHP 包装 MySQL 并使用 PHP 控制您的输出。然后你只需用日期和结果回显(或创建一个 XML 条目,无论你需要什么格式),即使它是 0。即使你目前对 PHP 一无所知,也有很多关于如何运行 MySQL 查询的教程在 PHP 中并输出结果。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2012-08-04
      • 2016-01-31
      相关资源
      最近更新 更多