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))  

ただし、同じ日が 2 つの異なる日曜日にある場合は としてカウントされますが、同じ日曜に同じ日がある場合は正しく 1 とカウントされるため、session_id機能visit_timeしません1session_idvisit_time

予想されるのは、sun、mon などの訪問日を持つ session-id の数を知りたいということです。session_id が 2 つの異なる日曜日に訪問した場合、それらは 2 回カウントされますが、同じ日曜日の場合は 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 に答える