【发布时间】:2017-06-11 01:12:39
【问题描述】:
我的表test_table中的样本数据:
date symbol value created_time
2010-01-09 symbol1 101 3847474847
2010-01-10 symbol1 102 3847474847
2010-01-10 symbol1 102.5 3847475500
2010-01-10 symbol2 204 3847474847
2010-01-11 symbol1 109 3847474847
2010-01-12 symbol1 105 3847474847
2010-01-12 symbol2 206 3847474847
鉴于上面的表格,我正在尝试找到放置在表格上的最佳索引(日期、符号、值和 created_time 组合应该是唯一的)以及与之一起进行的查询以返回以下内容:
date symbol value created_time
2010-01-09 symbol1 101 3847474847
2010-01-10 symbol1 102.5 3847475500
2010-01-10 symbol2 204 3847474847
2010-01-11 symbol1 109 3847474847
2010-01-12 symbol1 105 3847474847
2010-01-12 symbol2 206 3847474847
我正在为这三者中的每一组查找数据的日期、符号、值列,其中包含最大 created_time 列(在上面的示例中基本上是第 1、3、4、5、6、7 行)。
目前我已经尝试过这个索引...
CREATE UNIQUE INDEX "test_table_date_symbol_value_created_time"
ON "test_table" USING btree (date, symbol, value, created_time)
我正在使用这个查询。不知道这是否是最有效的方法,它似乎仍然很慢。
select *
from(
select date,
symbol,
value,
created_time,
max(created_time) over (partition by date, symbol) as max_created_time
from "test_table"
) t
where symbol in ('symbol1', 'symbol2') and created_time = max_created_time
【问题讨论】:
-
所以您想要每个唯一日期、符号和值组合的 最新 行吗?
-
是的,很抱歉,我对 SQL 非常缺乏经验,所以一直在尝试阅读大量内容并在询问之前进行有根据的猜测。
-
对不起,我的意思是说每个日期的最新行,符号组合。
标签: sql postgresql greatest-n-per-group