两张表,sale, client。 sale里面有client_id, 在Clinet里面有一个字段表示address。由于客户可能变换地址,有一个Current_IND=Y来标示现在的值,两个columns, v_from,v_to标示历史的变化,并且current_ind is null。 现在我想按月汇总sale的数据,并且也显示出address.如果client在月中修改了他的地址,则按照这个月最后修改的地址显示,请问怎么写呢。谢谢
 

解决方案 »

  1.   

    Clinet表中Current_IND=Y的那条记录不就是最后的地址吗?最好把表结构贴出来看看
      

  2.   

    给写data看看,有例子数据比较好理解逻辑一些。
      

  3.   

    --其中abc_date(两表中的任意之一字段)为修改地址的日期
     select a.*
       from sale a, client b
      where a.client_id = b.client_id
        and b.Current_IND = 'Y'
        and to_char(abc_date, 'yyyymmdd') >= 20091001
        and to_char(abc_date, 'yyyymmdd') <= 20091031;
      

  4.   

    谢谢楼上的,其实我的逻辑还稍微复杂一点。没把问题说清楚,不好意思了。 Sale表这个没有问题,还有一个Asset表,这个表表示的资产总数。对一个客户来说,每个月只存储一条记录,但是它会每周末重新算一次。现在的问题是,如果这个客户在月中修改了他的地址,那么他的Asset就要按照最后修改的那个开始月份计算。如下:
    Asset Table
    Asset_Date   Client_ID  Assets
    200908       001        2000
    200909       001        2300
    Client Table
    Client_ID   From_Date   To_Date  Currenty_Flag  City_Code
    001         20090101    20090914 N              BJ
    001         20090915             Y              SH这时候如果我统计200908的Assets值,001应该属于BJ,如果是200909,应该属于SH。
      

  5.   


    有点不明白你说的意思。
    是不是说
    Client表里City_code改后,Asset表记录日期Asset_Date字段修改为最后修改City_code日期?
      

  6.   

    要统计sale表中的数据,最后关于sale表什么都没说..又多了一个asset
    给出测试数据吧,附上你想要的结果
    比较明了一些
    楼主几天才来看一次呢
      

  7.   

    select decode(c.client_id,'Y',v_to,address)
    from sale s
         ,client c
    where s.client_id=c.client_id