0

我正在尝试生成以下格式的表格。

Proday | 2014-04-01 | 2014-03-01
--------------------------------
  1    |      12    |     17
  2    |       6    |      0
  7    |       0    |     24
 13    |       3    |      7

Prodays(两个时间戳之间的持续时间)是一个计算值,月份的数据是一个 COUNT。我可以输出一个月的数据,但是在将查询连接到其他月份时遇到了麻烦。每个月的索引(prodays)可能不匹配。例如。2014-04-01 可能没有 Prodays 7 的任何数据,而 2014-03-01 可能没有 Proday 2。应该用 0 或 null 表示。

我怀疑 FULL OUTER JOIN 应该可以解决问题。但是读过这在 Mysql 中是不可能的吗?

这是获取单月数据的查询:

SELECT round((protime - createtime) / 86400) AS prodays, COUNT(id) AS '2014-04-01'
FROM  `tbl_users` as t1
WHERE status = 1 AND DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-04-01'
AND DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-04-01')
GROUP BY prodays
ORDER BY `prodays` ASC

如何加入/联合附加查询以创建 2014-03-01 列?

4

1 回答 1

1

您想使用条件聚合——即将过滤逻辑从where子句移动到select子句:

SELECT round((protime - createtime) / 86400) AS prodays,
       sum(DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-04-01' AND 
           DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-04-01')
          ) as `2014-04-01`,
       sum(DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-03-01' AND 
           DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-03-01')
          ) as `2014-03-01`
FROM  `tbl_users` as t1
WHERE status = 1
GROUP BY prodays
ORDER BY `prodays` ASC;
于 2014-05-29T03:25:52.570 回答