我在数据库中有两列:
Value | Date
---------------------
1.3 | 1410374280000
值是一个浮点数,日期是一个以毫秒为单位的纪元整数
我正在尝试优化此查询,因为这会返回几千行。
SELECT * FROM data WHERE date >= [some_time_in_the_past]
由于我在前端渲染图表,因此我需要的数据点要少得多。所以我要截断日期。
SELECT data.date / 5000 * 5000 AS truncated, data.price FROM data
WHERE date >= [some_time_in_the_past]
以上将此日期截断为每5秒。所以现在我想SELECT DISTINCT
就可以了。
然而:
SELECT DISTINCT truncated, price
这将对truncated_date以及价格进行SELECT DISTINCT。有没有办法只在截断日期上选择SELECT DISTINCT并获得价格列。
答案 0 :(得分:0)
select distinct on (truncated) *
from (
select data.date / 5000 * 5000 as truncated, data.price
from data
where date >= [some_time_in_the_past]
) s
order by truncated, price desc
如果您希望从price desc
到price asc
答案 1 :(得分:0)
可能的解决方案是按截断日期列进行分组并计算价格列的平均值:
SELECT truncated,
AVG(price)
FROM data
GROUP
BY truncated
答案 2 :(得分:0)
为每组相同的truncated
(适合您不存在的定义)选择DISTINCT ON
的任意价格:
SELECT DISTINCT ON (1)
(date / 5000) * 5000 AS truncated, price
FROM data
WHERE date >= [some_time_in_the_past]
ORDER BY 1;
添加更多ORDER BY
表达式以选择更具体的内容,例如已提供的@Clodoaldo。