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,尽管当相同的星期天有相同的星期天时它正确地计session_id为1 visit_time

预期的事情是:我想知道有多少 session-ids 访问日为 sun、mon 等。如果 session_id 在两个不同的星期天访问过,那么它们被计算两次,但如果在同一个星期天,那么只有 1 个计数。那么我该如何在 Mysql 中做到这一点?

4

1 回答 1

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')
于 2013-01-25T13:46:36.267 回答