按工作日分组

时间:2013-01-25 13:44:30

标签: mysql sql group-by

有一个大表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_id在两个不同的星期日有visit_time,那么它会将它们计为1,尽管它在相同{{1}时正确计数为1在同一个星期天有session_id

预期的事情是:我想知道有多少会话ID有太阳,星期一等访问日。如果一个session_id在两个不同的星期天访问过,那么它们会被计算两次,但如果在同一个星期天,那么只有1计数。 那我怎么能在Mysql中做呢?

1 个答案:

答案 0 :(得分: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')