我有2个表,客户和CustomerActivity如下面的图片中显示,获得通过日期最新行:计数行并从多个表
我想输出表:
- 具有来自Customer表的CustomerType ='Existing Customer'的所有列,再加上2列:
- totalActivity(count activityID) - 显示每个客户的总活动数。
- latestActivity(最大checkinTime) - 显示在最近一次活动的日期时间
到目前为止,我有这2个查询,但我不知道如何组合/加入和过滤它们以获得我所需要的。任何人都可以用1个查询帮助(有些解释是完美的)
SELECT customerId, firstName, birthDate, customerType
FROM Customer
WHERE Customer.customerType = 'Existing Customer'
SELECT t1.activityId, t1.checkinTime, t1.customerId
FROM CustomerActivity t1
inner join (
SELECT customerId, max(checkinTime) as Lastest
FROM CustomerActivity
group by customerId
) t2 on t1.customerId = t2.customerId and t1.checkinTime = t2.Lastest
它完美的作品! – 2015-04-06 02:19:27
正如我在回答的评论中指出的那样,我相信由于子查询,这种方法效率会降低。我建议看看两者的执行计划,但我愿意打赌,这种方法将汇总每个客户的总体活动和最新活动,而直接加入表格会显示您仅针对“现有“ 顾客。唯一我不确定的是,如果这将被优化,但我不认为它会。如果您有200万客户,其中只有20万客户是现有客户,这可能会在性能上产生巨大差异。 – 2015-04-06 02:31:18
@ScottSmith,同意。我不知道优化器是否足够聪明以优化它,只有现有的客户才会被聚合。我建议OP应该看执行计划。 – 2015-04-06 02:36:13