我想弄清楚如何通过表迭代以获得id未处于活动状态的天数的计数。
假设我有以下表格:
<表类>
id
状态日期 tbody><<tr>1 活动 1/15/21 1的 1/13/21 1活动 1/12/21 1的 1/9/21 1活动 1/7/21 2活动 1/5/21 2的 1/4/21 2的 1/2/21 2活动 1/1/21 表类>
试试这个:
SELECT id,count(*) as days_inactive FROM table
WHERE status like 'inactive'
GROUP BY id
您可以使用变量实现您想要的。仅当且仅当id相同且当前行为活动状态时,计算距离前一个日期的天数,如下所示。
select @id :=0, @lastDate := null;
select id, sum(DaysInactive) as DaysInactive
from (
select id, (case when id = @id and status='Active' then datediff(tranDate, @lastDate) else 0 end) as DaysInactive
, @id := id, @lastDate := tranDate
from tablename
order by id, TranDate
) as calc group by id
您可以单独运行内部选择以确认您的计算是正确的。它也应该工作,如果你的表有连续的"非活动"或"活动"状态。为您的表和列名调整上述内容。