小编Sha*_*vil的帖子

PostgreSQL:为表中的每个组生成一系列日期

balances在 PostgreSQL 9.3 中有一个表,如下所示:

CREATE TABLE balances (
  user_id INT
, balance INT
, as_of_date DATE
);

INSERT INTO balances (user_id, balance, as_of_date) VALUES
  (1, 100, '2016-01-03')
, (1,  50, '2016-01-02')
, (1,  10, '2016-01-01')
, (2, 200, '2016-01-01')
, (3,  30, '2016-01-03');
Run Code Online (Sandbox Code Playgroud)

它只包含用户进行交易的日期的余额。我需要它为每个用户包含一行以及给定日期范围内每个日期的余额。

  • 如果用户在范围内的给定日期没有行,我需要使用他们前一天的余额。
  • 如果用户在范围内的给定日期之后创建了他们的帐户,我需要避免为该用户/日期组合创建一行。

我可以引用一个accounts表来获取用户的create_date

CREATE TABLE accounts (
  user_id INT
, create_date DATE
);

INSERT INTO accounts (user_id, create_date) VALUES
  (1, '2015-12-01')
, (2, '2015-12-31')
, (3, '2016-01-03');
Run Code Online (Sandbox Code Playgroud)

我想要的结果是这样的:

+---------+---------+--------------------------+
| …
Run Code Online (Sandbox Code Playgroud)

postgresql group-by

9
推荐指数
1
解决办法
1万
查看次数

有没有办法 SELECT n ON (如 DISTINCT ON,但每个都不止一个)

我有一个us_customers看起来像这样的表(有数十万行):

+----------+----------+
|    id    | us_state |
+----------+----------+
| 12345678 | MA       |
| 23456781 | AL       |
| 34567812 | GA       |
| 45678123 | FL       |
| 56781234 | AZ       |
| 67812345 | MA       |
| 78123456 | CO       |
| 81234567 | FL       |
+----------+----------+
Run Code Online (Sandbox Code Playgroud)

...我想n从每个us_state.

有没有办法在 PostgreSQL 9.3 中干净利落地做到这一点?

我可以通过以下方式us_state轻松地从每个客户那里获得一位客户:

SELECT DISTINCT ON (us_state) id
FROM us_customers
ORDER BY us_state;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要来自每个州的三个客户,有没有一种方法可以在不多次运行相同查询的情况下做到这一点?

postgresql greatest-n-per-group distinct

4
推荐指数
1
解决办法
1369
查看次数

PostgreSQL:从当前余额向后计算余额

我有一张balances表,current_balance用于存储银行账户;以及一个transfers表格,其中包含每次转账到账户和从账户转账的行(存款为正数,取款为负数)。

我需要创建一个帐户摘要,其中包含帐户的每次转账,以及该转账产生的余额。

例子:

+--------------------------+--------+---------+
|      activity_date       | amount | balance |
+--------------------------+--------+---------+
| 2015-12-24T20:27:00.670Z |     10 |     180 |
| 2015-12-19T12:13:50.085Z |   -275 |     170 |
| 2015-12-18T23:56:22.513Z |     10 |     445 |
| 2015-12-18T23:54:46.880Z |     50 |     435 |
| 2015-12-17T03:32:10.707Z |   -120 |     385 |
| 2015-12-12T03:56:50.775Z |     35 |     505 |
| 2015-12-11T23:09:40.211Z |    -20 |     470 |
| 2015-12-03T01:17:59.460Z |    -10 |     490 |
| 2015-11-23T15:39:35.003Z |    500 |     500 …
Run Code Online (Sandbox Code Playgroud)

postgresql recursive

3
推荐指数
1
解决办法
1707
查看次数