PostgreSQL使数据以5步为间隔

PostgreSQL使数据以5步为间隔,sql,postgresql,select,range,intervals,Sql,Postgresql,Select,Range,Intervals,我有一个从1到N的数据,我需要做的是使它以五步的间隔。例如,从1到5的每一项都进入区间1,从6到10进入区间2,依此类推直到结束 我这样做是为了找到间隔,但每个新数字似乎都有自己的间隔。有人能帮忙吗 select distinct Meters, (Meters/5)*5 || '-' || (Meters/5)*5+5 as Meters_range from v_temp_schema.tmp_split_data order by 1 输出: Meters Interval

我有一个从1到N的数据,我需要做的是使它以五步的间隔。例如,从1到5的每一项都进入区间1,从6到10进入区间2,依此类推直到结束

我这样做是为了找到间隔,但每个新数字似乎都有自己的间隔。有人能帮忙吗

select distinct Meters, (Meters/5)*5 || '-' || (Meters/5)*5+5 as Meters_range
from v_temp_schema.tmp_split_data
order by 1
输出:

     Meters  Interval 
        1    1-6     
        2    2-7     
        3    3-8     
        4    4-9     
        9    9-14
        6    6-11
        11   11-16
        8    8-13
        34   34-39
        .........
        78   78-83
        15   15-20
        81   81-86
我需要的输出:

     Meters  Interval 
        1    1-5     
        2    1-5     
        3    1-5     
        4    1-5     
        9    6-10
        6    6-10
        11   11-15
        8    6-10
        34   31-35
        .........
        78   76-80
        15   11-15
        81   81-85

您的
meters
列可能不是整数,这就是整数除法不起作用的原因,您必须确保它是整数。。。此查询为我返回了正确的结果(我刚刚生成了一系列整数来模拟
值,请确保在公式或子查询中
米旁边有
::int
部分

select
 meters
,(meters/5)*5+1 || '-' || (meters/5)*5+5 as interval
from (
    select generate_series (1,100,1)::int as meters
) m

从您共享的输出来看,
meters/5
除法似乎是作为浮点除法进行的,因此,除法然后乘以5只会返回相同的值。您可以
floor
将结果设置为整数除法:

SELECT   DISTINCT meters, FLOOR(meters/5) * 5 || '-' || FLOOR(meters/5) * 5 + 5 AS Meters_range
-- Here ------------------^-----------------------------^
FROM     v_temp_schema.tmp_split_data
ORDER BY 1

帮助我们帮助您-请共享一些示例数据、您获得的结果以及您尝试获得的结果?完成,添加在描述中:)