【发布时间】:2022-01-16 19:17:38
【问题描述】:
我在尝试计算表中的数据时遇到问题。
例如我的桌子是这样的:
table = test
id | transaction_date
1 | '2021-10-01 00:00:00'
2 | '2021-10-01 00:00:00'
3 | '2021-10-02 00:00:00'
4 | '2021-10-03 00:00:00'
5 | '2021-10-04 00:00:00'
6 | '2021-10-05 00:00:00'
7 | '2021-10-06 00:00:00'
1 | '2021-11-01 00:00:00'
2 | '2021-11-01 00:00:00'
3 | '2021-11-02 00:00:00'
1 | '2021-12-01 00:00:00'
2 | '2021-12-01 00:00:00'
3 | '2021-12-02 00:00:00'
4 | '2021-12-03 00:00:00'
8 | '2021-12-04 00:00:00'
8 | '2021-12-05 00:00:00'
9 | '2021-12-06 00:00:00'
9 | '2021-12-07 00:00:00'
我尝试使用此查询
WITH first_transaction_AS (SELECT MIN(transaction_date), id FROM test),
previous_month AS (SELECT DISTINCT idFROM test
WHERE transaction_date >= date_trunc('month', transaction_date)-interval '1 month'
AND transaction_date < date_trunc('month', transaction_date)
-- WHERE clause for previous month will be dynamic
SELECT date_trunc('month', transaction_date), COUNT(DISTINCT id)
FROM test
WHERE test.id NOT IN (SELECT id FROM previous_month) AND transaction_date NOT IN (SELECT min FROM first_transaction)
我想实现一个聚合查询,其中: 计算 ID 其中 ID 本月有交易且 ID 上个月无交易且不是 ID 的第一次交易
目前的问题是,ID 8 和 9 仍然会被计算在内,因为他们在同月的第一笔交易之后还有一笔交易。
所以我的目标是:
Date | Count
2021-12-01 00:00:00 | 1 (4)
【问题讨论】:
标签: sql postgresql