2015-06-29 31 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