1


0

これはSql Server 2008です。 このようなデータのセットがあります。

テーブルUserAchievement ID userIdchievementId completedDate

ユーザーが賞を獲得すると、その賞とユーザーは日付とともに記録されます。 私が欲しいのは、同じユーザーが互いに5分以内に獲得した3つの成果のセットを見つけるクエリです。 これを達成する方法についての任意の考え?

前もって感謝します-

チュー

2 Answer


4


私のブログのこの記事では、このソリューションについて詳しく説明します。

'' '' '

SELECT * UserArchievement ufからWHERE EXISTS(UserArchievement un WHEREからNULLを選択します。 .id <> uf.id)

5`分以内にすべての N`賞を選択したい場合は、これを使用してください。

UserArchievementからの選択DISTINCT ue.id ue.userID = uf.userIDとue.completedDateの間のue.completedDateとDate(分、5、uf.completedDate)WHERE(SELECT COUNT(*)からのユーザー達成.userId = uf.userIDとun.completedDateの間uf.completedDateとDATEADD(分、5、uf.completedDate))= 3

`3`をあなたが必要とするセットの中の任意の数の賞に置き換えてください。


1


はい、分かりました -

私はメインテーブルに3つのテーブルを結合しました。毎回between関数を使用して、新しく結合されたテーブルが元の時間から5分以内になるようにしました。