1

次の列を持つテーブルがあります

email, id, date 

email+id には一意のキーがあるため、テーブルには複数の電子メール アドレスを含めることができます。id はヌルにすることができます。

結果を次の形式で返したい

email, first date, number of ids, first id date (if number of ids not null) 

また

dave@myfirm.con, 2013-06-11, 0, NULL
alan@myfirm.con, 2013-06-12, 2, 2013-06-13

私のクエリは、効率的でありながら、私が望むものにかなり近いものです。

SELECT TOP (@rows * @page) email, MIN([date]) as [date],COUNT(id) as [ids],
[x] = CASE COUNT(id) WHEN 0 THEN NULL ELSE MIN([date]) END
FROM Table 
GROUP BY email ORDER by MIN([date])

ただし、このバージョンのクエリは、null 以外のエントリがある場合、各電子メールの全体的な MIN(日付) を返します。id

ID がない場合に MIN(date) を無効にする方法はありますか? ID が 0 の場合に多数の日数を追加し、dateこれの MIN を取得するソリューションに取り組んでいますが、よりスマートな方法が必要なようです。

4

2 に答える 2

7

条件付きが必要なので、内部でmin()使用します:casemin()

SELECT TOP (@rows * @page) email,
       MIN([date]) as [date],
       COUNT(id) as [ids],
       min(case when id is not null then [date] end) as [x]
FROM Table 
GROUP BY email
ORDER by MIN([date])
于 2013-06-13T15:27:58.217 に答える
0

これを試して

SELECT TOP (@rows * @page) email, MIN([date]) as [date],COUNT(id) as [ids],
[x] = (SELECT MIN([date]) FROM table t2 WHERE t2.email = t.email and t2.id IS NOT NULL) 
FROM Table t
GROUP BY email ORDER by MIN([date])
于 2013-06-13T15:05:19.510 に答える