SQL:为表中的每个成员仅选择表中的最新记录

时间:2015-06-03 11:00:58

标签: sql group-by greatest-n-per-group query-performance

我有广告表和每日广告效果报告。每个广告每天都会自动生成报告。报告包含当天的统计信息以及累积的广告观看次数。

-------   ----------------------------
| 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

鉴于此,我可以很容易地将累计总列数相加。

0 个答案:

没有答案