mysql - 在

时间:2015-12-17 10:50:08

标签: mysql

我的要求是创建一个视图。以下是输入:

gid     tid         c1  c2  c3  
20304   23233       5   6   2
20304   23423       3   2   6
20304   23567       0   3   2
20304   23784       0   0   0

其中c1,c2和c3是最后3天的列名。即如果今天是12月17日,我想捕获12月16日,12月15日和12月14日的数据。

我有一个交易表,我从哪里得到gid,tid。可以通过tid和date从多个行组派生计数。以下是查询。

如果对于1 gid和tid,我们可能会计算一天,但是在其他日子我们可能不会得到gid和tid。

SELECT
    gid,
    tid,
    count(*) as count1,
    modifiedDate,
    CURDATE() as today
from mbm
WHERE modifiedDate >= DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND modifiedDate <= CURDATE()
GROUP BY gid, tId, DATE_FORMAT(modifiedDate,'%Y-%m-%d')

使用此查询我得到以下结果:

gid     tid     count1
25494   25648   1
20202   25733   1
20202   25727   1
25494   25705   2
25403   25693   2
25494   25648   2
25489   25639   2
25403   25630   2
25494   25617   1
25489   25605   1
25403   25593   1
25155   25584   2
25494   25507   1
25489   25501   1
21522   25462   1
21522   25456   1
25403   25410   1
25155   25295   1
25155   25283   1
24909   25261   1

如何获得上述格式的结果?我该怎么用?联盟?

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用sumcase来实现此目标:

select gid,tid,
sum(case when modifiedDate >= curdate() - interval 1 day 
          and modifiedDate < curdate() then count1 else 0 end) as c1,
sum(case when modifiedDate >= curdate() - interval 2 day 
          and modifiedDate < curdate() - interval 1 day then count1 else 0 end) as c2,
sum(case when modifiedDate >= curdate() - interval 3 day 
          and modifiedDate < curdate() - interval 2 day then count1 else 0 end) as c3
from mbm
group by gid,tid;