如何选择一列上不同,而返回其他列
问题描述:
我在数据库中有两列:如何选择一列上不同,而返回其他列
Value | Date
---------------------
1.3 | 1410374280000
值是float和时间以毫秒为单位的时代整数
我试图优化这个查询会返回几千行。
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以及价格DISTINCT。有没有办法在截断日期只选择DISTINCT并获取价格列。
答
若要为DISTINCT ON
选取任意一个相同的价格truncated
(其适合你不存在的定义):
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已经提供。
答
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
答
最低的价格变化也许可能的解决方案是一群以截断日期列和计算价格列的平均值:
SELECT truncated,
AVG(price)
FROM data
GROUP
BY truncated
首先你显示一个名为'Value'的列表,然后继续一个名为'price'的列?同样''也得到价格栏''没有定义你想要的。显然,你想要将具有相同截断时间戳的行集合合并为一个。您必须定义*从该集合中选择哪个*价格。第一,最后,平均,随机,随意选择? – 2014-09-23 04:09:29