Reputation: 3116
here is query
SELECT `mpv`.`member_id` as member_id, `screen_name`, `viewed_url`,
count(viewed_url) as viewed_url_cnt
FROM (`tracker` mpv)
JOIN `members` m ON `mpv`.`member_id`=`m`.`member_id`
GROUP BY `viewed_url`, `member_id`
it returns
+-----------+-------------+------------+----------------+
| member_id | screen_name | viewed_url | viewed_url_cnt |
+-----------+-------------+------------+----------------+
| 1 | admin | / | 1 |
| 1 | admin | /1 | 1 |
| 1 | admin | /2 | 1 |
| 1 | admin | 2 | 1 |
| 1 | admin | 3 | 2 |
| 2 | test | 4 | 1 |
+-----------+-------------+------------+----------------+
6 rows in set (0.12 sec)
I need to get all records which have highest viewed_url_cnt
grouped by viewed_url
, member_id
. So based on results on the top, I whould like to get
+-----------+-------------+------------+----------------+
| member_id | screen_name | viewed_url | viewed_url_cnt |
+-----------+-------------+------------+----------------+
| 1 | admin | 3 | 2 |
| 2 | test | 4 | 1 |
+-----------+-------------+------------+----------------+
6 rows in set (0.12 sec)
Thanks
Upvotes: 0
Views: 128
Reputation: 43434
Try this:
select s1.member_id, s1.screen_name, s1.viewed_url, s1.viewed_url_cnt from (
select t1.member_id, t1.screen_name, t1.viewed_url, count(*) viewed_url_cnt
from tracker t1
group by t1.member_id, t1.screen_name, t1.viewed_url
) as s1
join (
select s2.member_id, max(viewed_url_cnt) as viewed_url_max from (
select t1.member_id, count(*) viewed_url_cnt
from tracker t1
group by t1.member_id, t1.viewed_url
) as s2
group by s2.member_id
) as s3
on s1.member_id = s3.member_id and s1.viewed_url_cnt = s3.viewed_url_max
Upvotes: 1
Reputation: 204
I guess the following is possible :
SELECT * FROM (SELECT * FROM table GROUP BY name) as foo GROUP BY dept
replace the inner query with your query and then you can just get the max(viewed_url_cnt) group by member_id .
Let me know if this fails..
Upvotes: 1
Reputation: 6178
I may be misinterpreting what you want, but a solution would be to use an inner query to determine the appropriate viewed_url_cnt
for each member_id
, and then JOIN
that to your table:
SELECT *
FROM my_qry outer
JOIN
(SELECT member_id, MAX(viewed_url_cnt) AS max_cnt
FROM my_qry
GROUP BY member_id) inner
ON outer.member_id = inner.member_id AND outer.viewed_url_cnt = inner.max_cnt
(Here my_qry
is the query you used to generate the original table.)
Upvotes: 1