2014-09-22 64 views
0

我在數據庫中有兩列:如何選擇一列上不同,而返回其他列

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並獲取價格列。

+0

首先你顯示一個名爲'Value'的列表,然後繼續一個名爲'price'的列?同樣''也得到價格欄''沒有定義你想要的。顯然,你想要將具有相同截斷時間戳的行集合合併爲一個。您必須定義*從該集合中選擇哪個*價格。第一,最後,平均,隨機,隨意選擇? – 2014-09-23 04:09:29

回答

0

若要爲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已經提供。

0

distinct on

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

0

最低的價格變化也許可能的解決方案是一羣以截斷日期列和計算價格列的平均值:

SELECT truncated, 
     AVG(price) 
    FROM data 
GROUP 
    BY truncated 
相關問題