这是一个查询:
select
e.eid,
e.event_time as contact_created,
cs.name as initial_class,
cn.create_time as lead_date
from bm_sets.event378 e
inner join bm_config.classes cs on cs.id = e.class_id and cs.cid=378 # and cs.name = 'Candidate'
left join bm_sets.conversion378 cn on cn.eid = e.eid and cn.create_time > e.event_time
where e.eid = 283818
group by eid, contact_created, initial_class, lead_date
此查询的结果如下所示:
eid, contact_created, initial_class, lead_date
283818 2015-03-07 09:43:42 Hot
283818 2015-03-10 22:19:47 Candidate
283818 2015-03-10 22:22:11 Candidate
我需要调整此查询,以便仅返回第一条记录,即具有最小contact_created日期的记录。但是因为我在其他字段中使用聚合函数,所以我也使用initial_class进行分组,因此min是基于组合分组的min。
每当我使用子查询时,我们的服务器似乎都很挣扎。所以我尝试使用另一个连接作为过滤器,例如:
inner join bm_sets.event378 e1 on e1.eid = e.eid and e1.event_time < e.event_time
但是我知道在运行它之前这不会起作用,因为仍然会返回eid(用户ID)283818,因此还会返回所有相关数据。
如何将结果限制为仅与event_time最小值对应的记录?
我正在使用where条件283818(我自己的用户id进行调试)作为我构造此查询时的健全性检查。准备好后,查询将不具备此条件,因此结果将适用于许多用户。
答案 0 :(得分:0)
如果您只需要前1名,那么您只需拨打
选择前1名
或者您需要创建一个返回最小created_contact的函数,然后将其与当前created_contact进行比较。
我希望这会对你有所帮助 感谢
答案 1 :(得分:0)
好的,我明白了。我像这样使用了一个null左连接(在groupwise min / max主题的其他SO帖子的背面):
将此添加到选择器:
e1.event_time
将此添加到加入:
left join bm_sets.event378 e1 on e1.eid = e.eid and e1.event_time < e.event_time
将此添加到where子句:
and e1.event_time is null