3

次のような日付、ユーザー、user_location を含むテーブルがあります。

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 日連続で一致するユーザーを見つけるために、いくつかのばかげた方法を試しました。毎日、少なくとも 2 つの異なる場所にいる必要があります。

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

4

1 に答える 1

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 つ以上の場所を持っている日を識別します。

于 2015-03-06T21:21:40.097 に答える