Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我如何确定每个组中所有加入/离开记录的净效应?_Mysql_Sequential - Fatal编程技术网

Mysql 我如何确定每个组中所有加入/离开记录的净效应?

Mysql 我如何确定每个组中所有加入/离开记录的净效应?,mysql,sequential,Mysql,Sequential,稍微简化一下,我有一个表格,显示组织成员的状态记录。他们通过变得“活跃”而加入,也可以通过变得“辞职”、“失效”或“死亡”而离开。在最早离开记录的日期,拥有一个或多个连续离开记录仅被视为只离开一次。如果发生这种情况,加入记录也是如此 使用成员id和变更数据将状态的每次变更记录为一条记录。单个成员可能有许多状态更改记录 我需要能够根据每个成员进行分组,并确定某一成员在某一特定年份(比如2015年)的所有记录的总体结果是否会导致该组织的净收益或净损失,从而使他们成为加入者或离开者,或者如果影响取消,

稍微简化一下,我有一个表格,显示组织成员的状态记录。他们通过变得“活跃”而加入,也可以通过变得“辞职”、“失效”或“死亡”而离开。在最早离开记录的日期,拥有一个或多个连续离开记录仅被视为只离开一次。如果发生这种情况,加入记录也是如此

使用成员id和变更数据将状态的每次变更记录为一条记录。单个成员可能有许多状态更改记录

我需要能够根据每个成员进行分组,并确定某一成员在某一特定年份(比如2015年)的所有记录的总体结果是否会导致该组织的净收益或净损失,从而使他们成为加入者或离开者,或者如果影响取消,则什么也没有。 我想要的结果是a有多少加入者和他们是谁,b有多少离开者和他们是谁

有谁能帮我用正确的编码技术,按顺序、时间顺序处理一个成员的所有记录,以确定该成员的净结果

下面是一个模式和数据示例-另请参见SQLFIDLE

这些数据的结果应该是

2015年加入者

id 190{2015年前离开,但2015年重新加入}

ID935{2015年新成员}

2015年离任者

ID178{2015年一次离职记录}

id 214{2015年有两个连续离职记录-但必须计为一个}

不离不弃

ID194{同年离开但重新加入}

ID300{同年加入并离开}

我为离任者尝试了以下方法see SQLfiddle,但这只适用于最后一条记录是离任记录的情况,因此也给了我成员300。我对细木工也有同样的问题

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'