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