我有下表:
[OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]
public JsonResult GetVehicle(string vrn)
{
...
}
我想要一个查询,返回滚动的项目总数以及我们有多少'打开'当天(在closed_at中打开为null或者大于结果行日期的关闭日期)
[OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]
public class CheckController : Controller
{
...
}
我知道我需要做一些累积计数,但我是垃圾并且需要你的帮助:)
答案 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
是这样的,即使没有新项目(仅限已关闭的项目),也会计算所有带活动的日期。