【发布时间】:2014-01-02 14:27:27
【问题描述】:
我正在尝试编写一个带有右连接的选择语句(对客户端),它将在连接表中找到一个特定的值 - 但前提是这是每个客户端的最新值(忽略空白和空值)。
Clients
Id Name
0 John Doe
1 Frank Smith
2 Sue Smith
3 John Smith
Activity (join table)
ClientId Type Date
0 500 2013-01-01 00:00:08
1 900 2013-01-01 00:00:07
2 NULL 2013-01-01 00:00:06
3 2013-01-01 00:00:05
4 500 2013-01-01 00:00:05
0 800 2013-01-01 00:00:04
1 500 2013-01-01 00:00:03
2 500 2013-01-01 00:00:02
3 500 2013-01-01 00:00:01
4 800 2013-01-01 00:00:00
所以这个查询至少会给我活动类型为 500 的客户端记录(在这种情况下,我会返回客户端 0 和 4):
select * from clients right join activity on activity.clientid = clients.id
where activity.type = 500
但是,我需要弄清楚如何让它只返回上述记录列表中的第一条记录。客户端 #0 的逻辑是唯一具有 500 作为其最新活动类型 = 500 的客户端。其他 3 个客户端具有 NULL、空白或 900 作为其“最新”活动类型。
我在想一些关于排序的魔法(日期通常会非常准确)、“顶部”和/或“限制”以及可能的联合?只是无法完全理解它。
【问题讨论】:
-
仅供参考,在 SO 上 LEFT JOIN 与 RIGHT JOIN 的比例大约为 30 比 1。只是说 ;-)
-
您需要更好的样本数据 - 所有日期都相同