TB1
-----------------------------
id|name|date
1 |A   |2008-1-1
2 |B   |2008-1-2
3 |C   |2008-1-5
4 |A   |2008-1-7
5 |A   |2008-1-8
6 |C   |2008-1-9
7 |B   |2008-1-10
-------------------------------------
在指定日期内,如果A是第一次出现,则新客户总是加一,就是count(name)。
但是在指定日期的前面,比如指定日期是2008-1-3到2008-1-5,,但是日期2008-1-1  A出现了,则A不再该日期的统计范围内。这样的统计 指定日期内的 新客户个数。
这样的sql该怎么写啊

解决方案 »

  1.   

    //date1,date2为你约定的时间段 比如date1为2008-1-3,date2为2008-1-5
    //限定日期内的新客户数为以下语句,2008-1-3以前出现的不算新客户
    select count(name) from 
    (select distinct name from tb1 where date between date1 and date2) a 
    where a.name not in (select distinct name from tb1 where date<date1)不知道是否正确,请测试
      

  2.   

    select Distinct count(name) from tb1 where date >= startdate and date <= enddate
    不知这个是否能用
      

  3.   

    思路:先得到每个人第一次出现的时间,然后加上日期范围筛选就行了。select count(name) from
    (
      select name, min(date) as firstOccurDate from tb1 group by name
    } a
    where a.firstOccurDate between date1 and date2
      

  4.   

    谢谢大家,JeffChung 的能用