2015-06-29 57 views
0

))大家好,這是我的表...如何基於PostgreSQL中的枚舉列總結所有行?

enter image description here

我想創建一個觸發器功能,每當「合計」是在timetype列,將總結所有timeelapse FROM mytable中插入WHERE fnname ='ff'AND timetype ='Lap',但只有timeindex具有最高十進制值的地方(例如mytable = 1.1,2.3,3.3)(假設最大可能的十進制值爲1.9或2.9或3.9, )。所以在上面的表格中,觸發器函數會自動總結所有藍色突出顯示的squeares,並將其放入最後一次timepase行(其中timetype ='Total')。我該怎麼做?

謝謝先進。

回答

0

組數據由timeindex的整數部分:

select distinct on (floor(timeindex)::int) 
    floor(timeindex)::int idx, timeindex, timeelapse 
from mytable 
where fnname = 'ff' 
and timetype = 'Lap' 
order by 1, 2 desc; 

idx | timeindex | timeelapse 
-----+-----------+------------ 
    1 |  1.1 | 01:00:00 
    2 |  2.3 | 03:00:00 
    3 |  3.3 | 08:00:00 
(3 rows) 

在觸發從上述查詢計算總和:

select sum(timeelapse) from (
    select distinct on (floor(timeindex)::int) 
     floor(timeindex)::int idx, timeindex, timeelapse 
    from mytable 
    where fnname = 'ff' 
    and timetype = 'Lap' 
    order by 1, 2 desc 
    ) alias; 

    sum  
---------- 
12:00:00 
(1 row) 
+0

嗨克林,感謝您的回覆,我已經嘗試你的代碼但是當試圖創建函數時,我得到這個錯誤信息:'錯誤:語法錯誤在或接近「DESC」..WHERE fnname ='ff'AND timetype ='Lap'ORDER BY 1,2,DESC'我錯過了什麼? 「idx」在代碼的這一部分中的含義是什麼(timeindex):: int idx,timeindex,timeelapse'是不是'idx'不合適?順便說一句,我犯了一個細節錯誤,計數應該是1.01,1.02,1.03,1.04而不是1.1,1.2,1.3,1.4,所以它可以繼續計數像1.09,1.1,1.11,1.12,這是一樣的權利?感謝高級。 – litu16

+0

在'ORDER BY 1,2 DESC'中刪除逗號2後的逗號。 – klin

+0

idx是列的別名 - 它已經到位。 (它就像'floor(timeindex):: int as idx,...') – klin