1

私のmysqlテーブルは次のようなものです:

+---------+---------+------------+-----------------------+---------------------+
| visitId | userId  | locationId | comments              | time                |
+---------+---------+------------+-----------------------+---------------------+
|       1 |    3    |     12     | It's a good day here! | 2012-12-12 11:50:12 |
+---------+---------+------------+-----------------------+---------------------+
|       2 |    3    |     23     | very beautiful        | 2012-12-12 12:50:12 |
+---------+---------+------------+-----------------------+---------------------+
|       3 |    3    |     52     | nice                  | 2012-12-12 13:50:12 |
+---------+---------+------------+-----------------------+---------------------+

魔女は訪問者の軌跡と訪問した場所に関するいくつかのコメントを記録します

カウントだけでなく、特定の日と場所とともに、1日に複数の場所を訪れた訪問者を見つけたいと思います。

サブクエリを試しました:

mysql> SELECT userId, locationId, time FROM visits 
WHERE (userId,DATE(time)) in (
  SELECT  userNum, Date(weiboTime) from visits GROUP BY userNum, Date(wei
  boTime) Having COUNT(*)>1);

そして共同クエリ:

mysql> select v2.userId, v1.loacationId, v1.time from visits as v1, visits as
v2 where v1.userId=v2.userId GROUP BY v2.userId, Date(v2.time) HAVING 
COUNT(DISTINCT v2.locationId);

2つ目が正しいかどうかわかりません。しかし、どちらも時間がかかりすぎます。私は何をすべきかについての提案はありますか?

アップデート

mysql> SELECT t.userId, locationId, t.time FROM (
              SELECT userId, time 
              FROM visits GROUP BY userId,Date(time)
              HAVING COUNT(*) > 1) AS t, visits 
       WHERE t.userId=visits.userId AND t.time=visits.time;

これが私自身をより明確にすることを願っています。

4

2 に答える 2

3

クエリには locationId が含まれていますが、指定された目標は、1 日に 1 回以上訪問したユーザーと日付の組み合わせを取得することです。これを取得するためのSQLは次のとおりです。

select userId, date(time), count(*)
from visits
group by userId, date(time)
having count(*) > 1;

更新: 1 を超えるユーザー/日の組み合わせ訪問からすべての訪問を取得するには:

select *
from visits
where (userId, date(time)) in (
    select userId, date(time)
    from visits
    group by userId, date(time)
    having count(*) > 1);
于 2013-03-21T03:59:55.617 に答える
0

サブクエリでカウントを使用GROUP BYする方が適していると思います。MySQL の count ドキュメントから、次のようなことができます。

mysql> SELECT userId, locationId, time, visitCount
       FROM
           (SELECT COUNT(*) as visitCount 
            FROM visits 
            GROUP BY userId)
       WHERE visitCount > 1;

あなたが遭遇している遅さは、節のHAVINGandから来ていると思います。DISTINCTWHERE

于 2013-03-21T04:12:20.863 に答える