我有广告表和每日广告效果报告。每个广告每天都会自动生成报告。报告包含当天的统计信息以及累积的广告观看次数。
------- ----------------------------
| Ads | | DailyAdPerformanceReport |
------- ----------------------------
| id |-->| ad_id (foreign key) |
------- | id |
| ... |
| date |
| cumulative_total |
----------------------------
我想通过为广告集中的每个广告选择上一个报告,并总结每个报告中的累计总观看次数来获取广告组的广告观看总数。
目前我通过获取一组广告ID并为每个广告ID运行此查询以获取其上一个广告报告来实现此目的:
SELECT "daily_ad_performance_reports"."cumulative_total"
FROM "daily_ad_performance_reports"
WHERE "daily_ad_performance_reports"."ad_id" = 1
ORDER BY "daily_ad_performance_reports"."date" DESC
LIMIT 1
我将所有累计总数加在一起以获得结果。它可以工作,但是对每个报告运行查询都很慢 - O(n)而不是O(1)
如何在单个查询中为每个广告选择最后日期记录?理想情况下,这样的查询将返回如下表:
ad_id | date | cumulative_total
-------------------------------------
1 | 1/6/2014 | 100
2 | 28/5/2014 | 200
3 | 18/2/2014 | 300
鉴于此,我可以很容易地将累计总列数相加。