2017-06-07 7 views
-1

これは可能ではないかもしれませんが、ショットに値するかもしれません。WHERE引数を使用せずにDISTINCTデータを必要とするSUM/COUNT内のオブジェクトの制限

非常に複雑なクエリがあり、特定のフィールドを作成しようとしています。要するに、ToS受諾の日付があるユーザーもあれば、(まだ)そうでないユーザーもあれば、両方を表示する必要があるユーザーもいますが、ToS SUMの後にログイン日を付ける必要があります。しかし、私は総ログインだけではなく、別個の日付の合計を求めています。それは私が

を持っている必要がありますNULLものを排除するので、私は、引数t2.session> = t1.ToSで追加することはできません

は、ここでの問合せの簡略図です:

SELECT t1.user, 
    IF(t1.ToS IS NULL, NULL,COUNT(DISTINCT DATE_FORMAT(t2.sessionTime, '%Y-%m-%d'))) AS TotalLoginDates 
FROM t1 
JOIN t2 ON t1.id = t2.userId 

最良のオプションがサブクエリ、CASE、または他のオプションであるかどうかは不明です。

ご協力いただきありがとうございます。

EDIT:いくつか入力し、所望の出力:

t1 
id | user   | ToS 
1 | John Doe  | 2017-01-01 00:00:00 
2 | Dave Smith | 2017-02-01 06:00:00 
3 | Alan Smithee | 2017-03-01 12:00:00 
 
t2 
sessionId | userId | sessionTime 
1001  | 1  | 2017-01-01 00:01:00 
1002  | 1  | 2017-01-05 03:17:45 
1003  | 2  | 2016-12-15 15:27:34 
1004  | 2  | 2017-03-15 16:67:12 
1005  | 3  | 2017-04-02 12:00:00 
1005  | 3  | 2017-04-02 13:15:00 
 
Desired Output: 
t1.user  | TotalLoginDates 
John Doe  | 2 
Dave Smith | 1 (only one date after ToS) 
Alan Smithee | 1 (2 logins on a single date) 
+2

あなたは、例えば、入力と出力の値を提供してもらえますか? – VirCom

+1

参照:[私は非常に単純なSQLクエリと思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve非常にシンプルなSQLクエリ) – Strawberry

+0

追加情報を追加し、MCVE情報を確認しました。ありがとう。 –

答えて

1

私はあなたがやりたいことを正確にわからないけど、この:要するに

、一部のユーザーToS受諾の日付があります。他にはありません (まだ)と私は両方を表示する必要があります

あなたがLEFT JOINをしたいことを示唆している:

FROM t1 LEFT JOIN 
    t2 
    ON t1.id = t2.userId AND t2.session >= t1.ToS 
+0

これは動作しているようですが、予想以上に多くのユーザーを抱えています。ただし、実際のクエリには他のJOINのいずれかの結果がある可能性があります。 –

関連する問題