【发布时间】:2017-11-27 09:30:25
【问题描述】:
我是 SQL 新手,我有一个包含以下列的表
+-------+--------+----+----+
| email | date | IP | ID |
+-------+--------+----+----+
我想做这样的事情:
SELECT T.email,
Max(T.date),
T.ip AS User_IP,
T.id AS ID
FROM LoginTable as T
WHERE (IP IS NOT NULL)
GROUP BY T.email
这当然行不通,因为 IP 和 ID 不在(最大)聚合函数中。但我需要 IP 与 ID 和日期匹配,所以我不能在这些列中使用 (max),因为我会从不同的行中得到结果,这不是一个选项。
回顾一下,我需要:
- 每封唯一电子邮件有一行(因此是分组依据)
- 所选行是日期最近的行 -> max(date)
- 我需要 IP 和 ID 与 max(date) 选择的行位于同一行。
【问题讨论】:
-
@WhatsThePoint 每封电子邮件将返回不止一行,因为所有 ID 都是唯一的,而且单个用户电子邮件的 IP 也可能不相等。 Mureinik 和 jophab 的回复就像一个魅力。谢谢!
标签: sql sql-server select top-n