ror*_*yok 1 sql t-sql sql-server min
我有一个包含以下各列的表格
email, id, date
Run Code Online (Sandbox Code Playgroud)
email + id上有一个唯一键,因此表可以包含电子邮件地址的倍数。id可以为null。
我想以以下格式返回结果
email, first date, number of ids, first id date (if number of ids not null)
Run Code Online (Sandbox Code Playgroud)
要么
dave@myfirm.con, 2013-06-11, 0, NULL
alan@myfirm.con, 2013-06-12, 2, 2013-06-13
Run Code Online (Sandbox Code Playgroud)
我的查询非常接近我想要的,但仍然很有效。
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])
Run Code Online (Sandbox Code Playgroud)
但是,此版本的查询将返回每封电子邮件的总MIN(日期),如果它们具有不为null的任何条目 id
如果没有ID,有什么方法可以使MIN(date)无效?我正在研究一种解决方案,date如果id为0 会增加很多天的时间,并获得MIN的最小值,但是似乎必须有一种更聪明的方法?
您需要有条件的min(),因此请case在内部使用min():
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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |