【发布时间】:2018-06-09 00:29:22
【问题描述】:
我需要将查询的行组合在一起以创建行的箱(组)。组的范围应动态传递给查询(例如,从变量@b = [4])。
我开始使用 row_number() 函数来获取按顺序编号的行。但我必须知道如何继续下去。这是我的脚本:
select date, measure, row_number() over (order by date,measure)
from dwh.overview_all_data
这是我查询的结果:
date measure row_number
1998-01-11 AOX 1
1998-01-11 Ammonium 2
1998-01-11 Arsenic 3
1998-01-11 Atrazine 4
1998-01-11 Biochemical Oxygen 5
1998-01-11 Cadmium 6
1998-01-11 Calcium 7
1998-01-11 Cesium 8
1998-01-11 Chemical Oxygen Demand (Cr) 9
1998-01-11 Chemical Oxygen Demand (Mn) 10
1998-01-11 Chlorides 11
1998-01-11 Chromium 12
1998-01-11 Copper 13
1998-01-11 Dissolved oxygen 14
1998-01-11 Fecal coliforms 15
1998-01-11 Iron 16
假设我想将这 16 行放入 4 个箱(b = [4]),我还需要定义每个箱(组)的开始和结束日期。即结果如下所示:
date measure row_number bin, startdate enddate
1998-01-11 AOX 1 1 1998-01-11 1998-01-11
1998-01-11 Ammonium 2 1 1998-01-11 1998-01-11
1998-01-11 Arsenic 3 1 1998-01-11 1998-01-11
1998-01-11 Atrazine 4 1 1998-01-11 1998-01-11
1998-01-11 Biochemical Oxygen 5 2 1998-01-11 1998-01-20
1998-01-15 Cadmium 6 2 1998-01-11 1998-01-20
1998-01-15 Calcium 7 2 1998-01-11 1998-01-20
1998-01-20 Cesium 8 2 1998-01-11 1998-01-20
1999-01-21 Chemical Oxygen Demand (Cr) 9 3 1999-01-21 2005-01-22
1999-01-22 Chemical Oxygen Demand (Mn) 10 3 1999-01-21 2005-01-22
1999-01-22 Chlorides 11 3 1999-01-21 2005-01-22
2005-01-22 Chromium 12 3 1999-01-21 2005-01-22
2005-02-01 Copper 13 4 2005-02-01 2007-04-01
2005-02-11 Dissolved oxygen 14 4 2005-02-01 2007-04-01
2005-03-15 Fecal coliforms 15 4 2005-02-01 2007-04-01
2007-04-01 Iron 16 4 2005-02-01 2007-04-01
【问题讨论】:
-
除以 4 并使用整数除法或使用
floor()函数删除余数。 -
它有效,但我必须用 -1 减去 row_number 才能使第一个 bin 和最后一个 bin 正确。你对开始和结束日期有什么想法吗?
标签: postgresql date grouping window-functions postgresql-9.5