2013-01-25 154 views
2

有这部分大表T;按周组划分

+---------------+------------+ 
| session_id | visit_time  | 
+---------------+------------+ 
| 4f89cebc109f9 | 1334431476 | 
| 4f89cf283d21c | 1334431528 | 
| 4f89cf283d21c | 1334431534 | 
| 4f89cf3b350a6 | 1334431547 | 
| 4f89cf42ab640 | 1334431554 | 
+---------------+------------+ 

我想查找周日明智的session_id数。 Session_id不是主键。所以,我想:

select count(distinct(session_id)) from T group by weekday(from_unixtime(time)) 

但它不会工作,因为如果同一session_idvisit_time在两个不同的星期日,那么它就会将他们为1,虽然它正确地计算1相同,当session_id对同一周日visit_time

预期的事情是:我想知道有多少会话ID访问日,太阳,星期一等。如果session_id已在两个不同的星期日访问,那么他们会被计数两次,但如果在同一个星期日,则只有1计数。 那么我怎样才能在Mysql中做到这一点?

+0

我不知道我明白你的周想干什么得到结果......组,工作日? –

+0

看看DATE_FORMAT – Strawberry

+0

根据你的句子“我想查找session_id weekday-wise的号码”,预期结果“if same session_id has visit_time on two different sundend”,对于'session_id'是1。你想每天查找'session_id'的数量吗? – Oswald

回答

4

使用WEEK代替WEEKDAY

SELECT WEEK(FROM_UNIXTIME(time)) WeekNo, 
     DATE_FORMAT(FROM_UNIXTIME(time),'%a') WeekName, 
     COUNT(DISTINCT(session_id)) 
FROM T 
GROUP BY WEEK(FROM_UNIXTIME(time)), 
      DATE_FORMAT(FROM_UNIXTIME(time),'%a')