内部联接后如何只获取最后一行?

时间:2019-06-20 12:32:39

标签: sql-server

我需要返回唯一的funeral_homes,其中包含未完成的销售线索,并按最后销售线索时间戳进行排序。

这是我的SQL查询:

select distinct h.funeral_home_name, h.funeral_home_guid, h.address1, h.city, h.state, p.discount_available, t.date_created
from tblFuneralHomes h inner join tblFuneralTransactions t on h.funeral_home_guid = t.funeral_home_guid 
inner join vwFuneralHomePricing p on h.funeral_home_guid = p.funeral_home_guid where completed=0 order by 'funeral_home_name' asc;

这是结果,但是我只需要最后添加铅的独特房屋

enter image description here 我应该在这里更改什么?

1 个答案:

答案 0 :(得分:1)

这里出现的问题是您要加入与表tblFuneralHomes具有1到许多关系的表,但是您希望每个fun仪馆只有一行。

我建议您不要使用distinct,而是将所需的输出eral仪馆列进行分组,然后对联接表中所需的列应用某种汇总,以便仅返回单个计算所得的值。所有可能的合并值中的值。

例如,下面我们找到与每个fun仪馆相关的第一个交易日期(min):

select h.funeral_home_name, h.funeral_home_guid, h.address1, h.city, h.state,
       p.discount_available, min(t.date_created)
from tblFuneralHomes h 
inner join tblFuneralTransactions t on h.funeral_home_guid = t.funeral_home_guid 
inner join vwFuneralHomePricing p on h.funeral_home_guid = p.funeral_home_guid 
where completed=0 
group by h.funeral_home_name, h.funeral_home_guid, h.address1, h.city, h.state, 
         p.discount_available
order by h.funeral_home_name asc

请注意,根据tblFuneralHomesvwFuneralHomePricing之间关联的基数,您可能还需要从分组中删除p.discount_available并使用聚合函数对其进行介绍,类似于我对t.date_created

所做的工作