重金求解 SQL 编程问题,
是微软的sql 服务器,不是SAS里的proc sql。 没找到sql 版,就到这里问了。
这是模型数据2014, 我写的SQL code也在这里,但是有错误,
还在练习中,但是时间不等人。
悬赏 400 金币, 不够可以到留学区再奖励,金币不是问题。
为了避免金币通货膨胀所以不能一次悬赏太多。 最全面且能用的回答,经试验后会得到最高奖励。
具体看这个附件里的模拟数据。由于给出数据只是例子,胡乱写的,所以可能无法给出精确的结果。但是可以从数据中看出问题的所在。实际数据近百万,太大了,放不开。
我已经通过 Excel 实现了以下结果,但是太麻烦了,花了一个多小时。不知道能否有大牛可以帮我在SQL里实现以下想要的结果,要最后的结果基本不需要再在Excel里清理才行。
如果觉得半年的那个更换plan条件有些苛刻,那就先假设每个人在一年里都不会更换 plan,但是每年年末可以更换也可以取消
。(这个悬赏 400 金币)
如果可以的话,请把半年的那个更换条件也考虑进去,这样可以全面解决问题。(如果能解决的话,悬赏金币数量可以增加)。
给出条件和问题:
以下提到的平均分计算方法是把每个 plan 的半年或一年里(视情况定)的所有 member 的对应 points 列出来并加和,而且要把member数量统计出来并加和。在Excel里用两个sum if相除就可以实现,但是sql里就不同了。 通过观察数据可以看出memberID在一年里是不变的,所以一年里根据 claim 和 medicine 数据统计出的 member ID 数量实际是 number of total claims。 一个member可以只看医生不拿药,也可以只拿药不看医生,虽然这种人很少,但是有时候会有missing data就是因为这种理论可能。
1. Start date 指的是每年12个月,2014或2015。 但是最后的结果要总结成每年或每半年视情况而定。
2. 这个医疗赔款claimpaid 和药费medicinepaid 不是每个月都会有的,所以要忽略没有的年非
3. 这个会员号是固定的,所以每年12个月不变。
4. 这个plan 有很多种,为了理解简单,拿出4个做比较。Med A, Med B 算个人买的类型,Com A, Com B算公司买的类型。一旦有member 选了Med plan,半年里只可以在7月初换一次,也可以不换,但是不能取消plan,每年年末再重新选是否签新的plan。 4 种 plan 可以互换。
我想知道的是2014年这一年,有多少人是上半年加入 plan med A 的,加入后有多少人至少留到2014年底,又有多少人在下半年换了plan 。 留到2014年底的又有多少人在2015年初不再买任何plan或者更换plan了,有多少人继续留在 plan med A 直到2015年6月底。 今年7月初又有更换plan,最后剩下多少人。
还有就是在2014年下半年,15年上下半年加入med plan A的也要单独列出来,这样根据plan name 把每个plan 的在每个时间段新加入和更换plan或者退出的人树和对应的分数列出来。 这样最终我就能有每个plan 在各个时间段里老用户和新用户的人数和分数,可以做对比。
再算平均分的时候我要的是至少半年的member人数和分数。是用每半年的总分数除以总人数算出半年的平均分,这个只对中途更换plan 的人来说的。 如果一年里没有更换过plan 的只需要把这一年的平均分算出来即可。2014和2015 都没有换过plan的老用户也要只算一年的平均分,然后做对比,因为每年ZF的政策不一样。
2014年下半年加入plan A的新用户,可以把他们在这下半年的平均分算出来。
此外我还想要每个更换plan的用户在哪个时间段退出或者更换新plan的, 然后他们的分数在每个阶段的分数是多少。 这个table 要按member 来列,所以和之前提到过的所有table 都不一样。 要列成4列2014年和2015年上下半年的分数,这个不需要算平均分。 至于从每有更换过plan 的,也可以这样统计出来他门的分数。 这个容易些,可以再加 100 金币。
谢谢。