MySQL累计计数打开项目

时间:2017-01-26 15:02:22

标签: mysql sql sum

我有下表:

[OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]
public JsonResult GetVehicle(string vrn)
{
    ...
}

我想要一个查询,返回滚动的项目总数以及我们有多少'打开'当天(在closed_at中打开为null或者大于结果行日期的关闭日期)

[OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]
public class CheckController : Controller
{
   ...
}

我知道我需要做一些累积计数,但我是垃圾并且需要你的帮助:)

1 个答案:

答案 0 :(得分:2)

这是一种简单的方法。获取唯一日期,然后使用相关子查询:

select d.dte,
       (select count(*) from t where t.created_at < d.dte + interval 1 day
       ) as total,
       (select count(*) from t where t.closed_at < d.dte + interval 1 day
       ) as closed,
       (select count(*) from t
        where t.created_at < d.dte + interval 1 day and
              (t.closed_at is null or t.closed_at >= d.dte + interval 1 day)
       ) as total
from (select date(created_at) as dte from t
      union -- on purpose to remove duplicates
      select date(closed_at) from t
     ) d;

+ interval 1 day所以“日”是截至当天的午夜。

比较缺少date()因此相关子查询可以使用索引。

子查询中的union是这样的,即使没有新项目(仅限已关闭的项目),也会计算所有带活动的日期。