如何查看行之间的变化?
How can I get a view of the changes between rows?
我有一个 table 看起来像
object_id attribute_1 attribute_2 attribute_3
1 a a a
1 a a a
1 a b a
1 a a a
2 z z z
2 w z z
我想了解用户对这些对象进行了哪些更改。一个潜在的最终结果可能是 table 个对象和更改属性的次数,以及记录对象的总次数,如下所示:
object_id attribute_1 attribute_2 attribute_3 count
1 0 2 0 3
2 1 0 0 2
我将如何做到这一点?还有哪些其他可能的方法可以量化和理解正在发生的变化?
如果当属性变回以前的值时不需要计为更改,则可以按 object_id 和 attribute_N 分组以获得此属性的不同值的数量属性。
我建议你写一个应用程序或程序来计算你想要的东西。但是如果你只想通过一个查询来解决问题,那就是这样的:
SELECT object_id,
sum(changes_attribute_1) AS changes_attribute_1,
sum(changes_attribute_2) AS changes_attribute_2
FROM
( SELECT object_id,
sum(IF(atribute = 2,changes,0)) AS changes_attribute_2,
sum(IF(atribute = 1,changes,0)) AS changes_attribute_1
FROM
(SELECT count(*)-1 AS changes,
object_id,
1 AS atribute
FROM
(SELECT count(*),
object_id
FROM TABLE AS inner_table
GROUP BY object_id,
attribute_1) AS tudo
GROUP BY object_id
UNION ALL SELECT count(*)-1 AS changes,
object_id,
2 AS atribute
FROM
(SELECT count(*),
object_id
FROM TABLE AS inner_table
GROUP BY object_id,
attribute_2) AS tudo
GROUP BY object_id) AS tudo
GROUP BY object_id,
atribute) AS tudo2
GROUP BY object_id
我已经用这个 table 试过查询:
object_id, attribute_1, attribute_2
1, 1, 1
1, 2, 1
1, 3, 2
2, 1, 1
2, 2, 2
2, 3, 4
我得到了这个结果
# object_id, changes_attribute_1, changes_attribute_2
1, 2, 1
2, 2, 2
我有一个 table 看起来像
object_id attribute_1 attribute_2 attribute_3
1 a a a
1 a a a
1 a b a
1 a a a
2 z z z
2 w z z
我想了解用户对这些对象进行了哪些更改。一个潜在的最终结果可能是 table 个对象和更改属性的次数,以及记录对象的总次数,如下所示:
object_id attribute_1 attribute_2 attribute_3 count
1 0 2 0 3
2 1 0 0 2
我将如何做到这一点?还有哪些其他可能的方法可以量化和理解正在发生的变化?
如果当属性变回以前的值时不需要计为更改,则可以按 object_id 和 attribute_N 分组以获得此属性的不同值的数量属性。
我建议你写一个应用程序或程序来计算你想要的东西。但是如果你只想通过一个查询来解决问题,那就是这样的:
SELECT object_id,
sum(changes_attribute_1) AS changes_attribute_1,
sum(changes_attribute_2) AS changes_attribute_2
FROM
( SELECT object_id,
sum(IF(atribute = 2,changes,0)) AS changes_attribute_2,
sum(IF(atribute = 1,changes,0)) AS changes_attribute_1
FROM
(SELECT count(*)-1 AS changes,
object_id,
1 AS atribute
FROM
(SELECT count(*),
object_id
FROM TABLE AS inner_table
GROUP BY object_id,
attribute_1) AS tudo
GROUP BY object_id
UNION ALL SELECT count(*)-1 AS changes,
object_id,
2 AS atribute
FROM
(SELECT count(*),
object_id
FROM TABLE AS inner_table
GROUP BY object_id,
attribute_2) AS tudo
GROUP BY object_id) AS tudo
GROUP BY object_id,
atribute) AS tudo2
GROUP BY object_id
我已经用这个 table 试过查询:
object_id, attribute_1, attribute_2
1, 1, 1
1, 2, 1
1, 3, 2
2, 1, 1
2, 2, 2
2, 3, 4
我得到了这个结果
# object_id, changes_attribute_1, changes_attribute_2
1, 2, 1
2, 2, 2