2012-04-16 15 views
3

で、私は、テーブルには日付が含まれている必要があり、利用者、のようなUSER_LOCATION検索:繰り返し、ユーザーとの一致条件のMySQL

20120417 userA location1 
20120417 userA location2 
20120417 userB location3 
20120417 userC location2 
20120417 userA location1 
20120417 userB location2 
20120417 userA location3 
20120416 userA location1 
20120416 userA location2 
20120416 userB location3 
20120416 userC location2 
20120416 userA location1 
20120416 userB location2 
20120415 userA location3 
20120415 userA location1 
20120415 userA location2 
20120415 userB location3 
20120415 userC location2 
20120415 userA location1 
20120415 userB location2 
20120415 userA location3 
20120414 .... 
.... 

を私は毎日、行の3日間をmatchsユーザーを見つけるために、いくつかの愚かな方法を試してみました少なくとも2つの異なる場所であったにちがいない。

これを行うにはSQLクエリを使用することができますか、または私はPHPスクリプトのようなものを試す必要がありますか?

+1

これらの「愚かな」例のいくつかを挙げてください。 – hjpotter92

+1

実際に日付がどのように格納されていますか?または、MySQLのdatetime型ですか? – Ing

+0

phpで新しいテーブルを選択して保存し、phpで再計算する..あまりにも愚かなことをここで言う:( – timy

答えて

0

私はこれがうまくいくと思います。 MSSQLを使用すると、派生テーブルを複製する必要はありません。

SELECT l1.user,l1.thedate, COUNT(*) CNT FROM 
(/* Derived table1: user,thedate,loc */ 
SELECT st.user,st.thedate,COUNT(*) locs FROM sotest st 
GROUP BY st.user,st.thedate 
HAVING(COUNT(DISTINCT st.location) > 1) 
) l1 
JOIN 
(/* Derived table2: user,thedate,loc */ 
SELECT st.user,st.thedate,COUNT(*) locs FROM sotest st 
GROUP BY st.user,st.thedate 
HAVING(COUNT(DISTINCT st.location) > 1) 
) l2 ON l2.user = l1.user and DATEDIFF(l2.thedate , l1.thedate) = 1 
JOIN 
(/* Derived table3: user,thedate,loc */ 
SELECT st.user,st.thedate,COUNT(*) locs FROM sotest st 
GROUP BY st.user,st.thedate 
HAVING(COUNT(DISTINCT st.location) > 1) 
) l3 ON l3.user = l2.user and DATEDIFF(l3.thedate , l2.thedate) = 1 
GROUP BY l1.user,l1.thedate 

派生テーブルのそれぞれは、ユーザーが2つ以上の場所を持つ日を識別します。

関連する問題