由于存储每个版本的每个项目的表。
例如:
+--------+----------+---------------+--------+---------------------+
| ItemId | Revision | PreviousState | State | DateChanged |
+--------+----------+---------------+--------+---------------------+
| 1 | 1 | NULL | New | 2014-11-13 10:00:00 |
| 1 | 2 | New | Active | 2014-11-15 10:00:00 |
| 1 | 3 | Active | New | 2014-11-17 10:00:00 |
| 1 | 4 | New | Active | 2014-11-19 10:00:00 |
| 1 | 5 | New | Active | 2014-11-20 10:00:00 |
| 1 | 6 | Active | Closed | 2014-11-22 10:00:00 |
| 2 | 1 | NULL | New | 2014-11-13 10:00:00 |
| 2 | 2 | New | Active | 2014-11-16 10:00:00 |
| 2 | 3 | Active | Closed | 2014-11-17 10:00:00 |
| 2 | 4 | Closed | Active | 2014-11-19 10:00:00 |
| 2 | 5 | Active | Closed | 2014-11-21 10:00:00 |
+--------+----------+---------------+--------+---------------------+
我需要计算每个项目有多少天是在每个州(除“关闭”)。
结果应该是这样的:
+--------+-----+--------+
| ItemId | New | Active |
+--------+-----+--------+
| 1 | 4 | 5 |
| 2 | 3 | 3 |
+--------+-----+--------+
我试图用两种方法- GROUP BY
和嵌套游标。
使用游标(尤其是嵌套游标)是一种不好的做法。 而且是非常缓慢的。
GROUP BY
也不会起作用,因为有国家没有严格的顺序(新建- >活动- >关闭)。 这可能是混乱的新建 - >活动 - >关闭 - >活动 - >关闭 - >新建 - >关闭。
我没有看到任何其他方式来计算的话不反复的所有记录和比较状态。
有没有什么解决办法吗?
提前致谢。