My data looks like this:
CreateTime | mobile
-----------+--------
2017/01/01 | 111
2017/01/01 | 222
2017/01/05 | 111
2017/01/08 | 333
2017/03/09 | 111
What I am trying to do is to add a variable if it is the first time that this mobile number occured:
CreateTime | mobile | FirstTime
-----------+--------+----------
2017/01/01 |   111  |  1
2017/01/01 |   222  |  1
2017/01/05 |   111  |  0
2017/01/08 |   333  |  1
2017/03/09 |   111  |  0
2017/03/15 |   222  |  0
2017/03/18 |   444  |  1
Basically we need to add a "true/false" column if it is the first time (based on createtime (and some other fields) which may or may not be sorted) that this specific mobile number occurred.
Ideally, this adjusted table will then be able to give me the following results when queried:
Select Month(createtime) as month,
       count(mobile) as received,
       sum(Firsttime) as Firsttimers
  from ABC
  Group by month(createtime)
Result:
Month   | Received | FirstTimers
--------+----------+------------
2017/01 |   4      |  3
2017/03 |   3      |  1 
If I can get to the RESULTS without needing to create the additional step, then that will be even better.
I do however need the query to run fast hence my thinking of creating the middle table perhaps but I stand corrected.
This is my current code and it works but it is not as fast as I'd like nor is it elegant.
SELECT  Month(InF1.createtime) as 'Month',
                    Count(InF1.GUID) AS Received,
                    Sum(coalesce(Unique_lead,1)) As FirstTimers
FROM MYDATA_TABLE as InF1
Left Join
    ( SELECT createtime, mobile, GUID, 0 as Unique_lead
        FROM  MYDATA_TABLE as InF2
            WHERE createtime = (SELECT min(createtime)
                                            FROM MYDATA_TABLE as InF3
                                            WHERE InF2.mobile=InF3.mobile
                                        )
    ) as InF_unique
On Inf1.GUID  = InF_unique.GUID
group by month(createtime)
(appologies if the question is incorrectly posted, it is my first post)
 
    