我有2张表,
表A account
pol_id(保单ID)(不唯一 为每笔缴费都写一行) amount(金额) time(缴费时间)(该字段是字符型) cust_id(用户ID)
表B CUSTOMER
cust_id cust_name cust_cardid(身份证号)给出一个时间点 比如说 6月20日
我现在要找以下几个条件同一客户同一天有三笔缴费记录(对于不同保单,同一保单几次缴费只算一次)
同一客户对于三个自然日,每个自然日至少有一笔缴费记录;
同一客户在之前14 个自然日里面 缴费累计超过20W 只要满足其中任意一个条件,就返回该客户的身份证号码 请问一下怎么写?
大家救急,只有一个礼拜时间 还有很多没写。

解决方案 »

  1.   

    select a.cust_id, count(distinct a.pol_id) from a 
    where a.time='6月20日'
    group by a.cust_id
    having count(distinct a.pol_id)>=3
    union 
    select a.cust_id, count(distinct trunc(t.time))
    where a.time<='6月20日' and a.time>'6月17日'
    group by a.cust_id
    having count(distinct trunc(t.time))=3 
    union 
    select a.cust_id, sum(a.amount)
    where a.time<='6月20日' and a.time>'6月6日'
    group by a.cust_id
    having sum(a.amount)>200000日期处理就不帮你写了,你自己确定下,关键是在count(distinct)上。
      

  2.   

    看看oracle的统计函数over的用法,你这个问题可以使用它来解决