Mysql 我如何确定每个组中所有加入/离开记录的净效应?
稍微简化一下,我有一个表格,显示组织成员的状态记录。他们通过变得“活跃”而加入,也可以通过变得“辞职”、“失效”或“死亡”而离开。在最早离开记录的日期,拥有一个或多个连续离开记录仅被视为只离开一次。如果发生这种情况,加入记录也是如此 使用成员id和变更数据将状态的每次变更记录为一条记录。单个成员可能有许多状态更改记录 我需要能够根据每个成员进行分组,并确定某一成员在某一特定年份(比如2015年)的所有记录的总体结果是否会导致该组织的净收益或净损失,从而使他们成为加入者或离开者,或者如果影响取消,则什么也没有。 我想要的结果是a有多少加入者和他们是谁,b有多少离开者和他们是谁 有谁能帮我用正确的编码技术,按顺序、时间顺序处理一个成员的所有记录,以确定该成员的净结果 下面是一个模式和数据示例-另请参见SQLFIDLE 这些数据的结果应该是 2015年加入者 id 190{2015年前离开,但2015年重新加入} ID935{2015年新成员} 2015年离任者 ID178{2015年一次离职记录} id 214{2015年有两个连续离职记录-但必须计为一个} 不离不弃 ID194{同年离开但重新加入} ID300{同年加入并离开} 我为离任者尝试了以下方法see SQLfiddle,但这只适用于最后一条记录是离任记录的情况,因此也给了我成员300。我对细木工也有同样的问题Mysql 我如何确定每个组中所有加入/离开记录的净效应?,mysql,sequential,Mysql,Sequential,稍微简化一下,我有一个表格,显示组织成员的状态记录。他们通过变得“活跃”而加入,也可以通过变得“辞职”、“失效”或“死亡”而离开。在最早离开记录的日期,拥有一个或多个连续离开记录仅被视为只离开一次。如果发生这种情况,加入记录也是如此 使用成员id和变更数据将状态的每次变更记录为一条记录。单个成员可能有许多状态更改记录 我需要能够根据每个成员进行分组,并确定某一成员在某一特定年份(比如2015年)的所有记录的总体结果是否会导致该组织的净收益或净损失,从而使他们成为加入者或离开者,或者如果影响取消,
SELECT member_id, status_type, date_assigned
FROM memstatus
WHERE date_assigned = (SELECT MAX(date_assigned)
FROM memstatus AS T1
WHERE T1.member_id = memstatus.member_id
AND T1.date_assigned BETWEEN CONCAT('2015','-01-01') AND CONCAT('2015','-12-31')
)
AND status_type NOT LIKE 'Active'
选择成员id、分配年份、,
案例
当最终状态为0时,则为“Joiner”
当finalStatus=0时,则“两者都不”
终止
从中选择成员id,Yeardate分配为分配的年份,
SUMCASE状态\类型\ id='活动'时,则为1
当status_type='已辞职'时,则为-1
当状态_type=‘失效’时,则为-1
当状态_type='已死亡'时,则为-1
以最终状态结束
来自memstatus
按成员id、分配的年份日期分组
作为一个
按成员下单\u id谢谢,这不仅满足了我的要求,而且给了我一个有助于进一步处理的结果。使用SUM的好主意。我感到非常沮丧,很明显如何手动操作,但我无法真正了解大脑在做什么,以便将其转换为SQL。顺便说一句,我编辑了我的问题,使状态类型字段名与SQLFiddle中的字段名匹配,并以同样的方式编辑了您的答案,使字段名与问题匹配,但是编辑必须等待同行评议,然后才能显现出来——不管这意味着什么。一个向上投票并获得批准的答案将是很好的8感谢爱德华教授,我没意识到我可以同时给出这两个答案。我认为批准一个答案会自动提升你的地位。我现在已经做了。
SELECT member_id, status_type, date_assigned
FROM memstatus
WHERE date_assigned = (SELECT MAX(date_assigned)
FROM memstatus AS T1
WHERE T1.member_id = memstatus.member_id
AND T1.date_assigned BETWEEN CONCAT('2015','-01-01') AND CONCAT('2015','-12-31')
)
AND status_type NOT LIKE 'Active'