有个表:
ID DATE
1 10:10
2 10:15
3 10:50
4 10:05
5 10:10
1 9:45
3 9:50
2 10:00
...然后要做的是在proc中先按照时间顺序排列select出这些记录,然后有5个地址,要求:
1、相同ID的要发到同一个地址
2、尽量保证不同ID平均发到5个地址,例如发送到地址1的有5个ID,发送到地址2的有5个ID,发送到地址3的有5个ID,发送到地址4的有5个ID,发送到地址5的有4个ID。之前我的想法:
1、如果不考虑相同ID必须发到同一个地址,我可以在一个ID发到地址1时加个变量,例如ind=2,这样处理下一个ID时就会进入地址2,在地址2中指定变量ind=3,下一个ID处理时就进入地址3,以此类推。
2、如果相同ID发到同一个地址,可以对ID%5取模,例如模是0的发到地址1,模是1的发到地址2,以此类推。但现在的情况是以上两种的合体,所以思路还不是很清晰,大家讨论下,谢谢高手指点! 

解决方案 »

  1.   

    我实际做项目时遇到过类似的问题,不过当时考虑分发的量不大,采取的是下面的设计方案按你的例子来说,建立一个存储所有ID的数据表,称为《ID-地址对照表》,分为两个字段
    {ID,地址} 主键为ID建立一个存储每个地址最后一次被分发的时间,称为《地址分发时间表》,分为两个字段
    {地址、最后分发时间} 主键为地址分发逻辑
    1. 获取ID,从《ID-地址对照表》中查询有无分发历史记录
    1.1. 如果有,直接分发到该历史记录的地址,并更新《地址分发时间表》中对应地址的最后分发时间
    1.2. 如果无,从 《地址分发时间表》找到最后分发时间最早的地址,也就是最长时间没有分发的地址,将该ID分发到该地址,将ID-地址关系插入《ID-地址对照表》,并更新《地址分发时间表》中对应地址的最后分发时间由于这个需要每次分发至少更新一个表,所以对于分发量很大的情况,不是很合适可以考虑将设计中提到的《地址分发时间表》作为数组存储在内存中处理,减少更新量,并且由应用程序定期将数组中的数据同步到实际物理表中作为永久保存