【发布时间】:2017-11-17 14:12:03
【问题描述】:
我有一个要求让我陷入困境。我必须返回具有准确连续 3 行每月发票金额 > 2,000 美元的位置 ID。换句话说,我不想返回成熟位置的 ID(可能有数百个月度发票行)。
Rextester 示例数据:http://rextester.com/CNJC15871
信息:
- 报告将在每月的第一天生成
- 每月发票日期为每月 15 日
期望的输出:在下面的发票表中,
- 对于 10 月 1 日的报表运行日期,将返回 loc_ids 2223 和 3344,因为 9/15 是发票金额连续第三个月 >$2,000
- 对于 11 月 1 日的报表运行日期,将按照相同的逻辑返回 loc_id 6678。
-
对于随后的报告月份,应不返回 2223、3344 和 6678,因为它们连续 >3 个月 >$2,000。
| loc_id | invoice_date | invoice_amt | Notes | |--------|--------------|-------------|---------------------------| | 1234 | 5/15/2002 | 7000 | | | 1234 | 6/15/2002 | 8000 | | | .. | … | … | | | 1234 | 11/15/2017 | 58000 | | | | | | | | 9987 | 11/15/2006 | 7500 | | | 9987 | 12/15/2006 | 8500 | | | … | … | | | | 9987 | 11/15/2017 | 63000 | | | | | | | | 5544 | 3/15/2015 | 9200 | | | 5544 | 4/15/2015 | 10000 | | | … | … | | | | 5544 | 11/15/2017 | 70000 | | | | | | | | 2223 | 5/15/2017 | 2500 | Count| >2000 | | 2223 | 6/15/2017 | 1375 | Do not count| <2000 | | 2223 | 7/15/2017 | 8000 | Restart count| >2000 (1) | | 2223 | 8/15/2017 | 9000 | Continue count| >2000 (2) | | 2223 | 9/15/2017 | 9800 | Continue count| >2000 (3) | | 2223 | 10/15/2017 | 10500 | Stop count| >3 in a row | | 2223 | 11/15/2017 | 11200 | Stop count| >3 in a row | | | | | | | 3344 | 7/15/2017 | 3500 | Count| >2000 (1) | | 3344 | 8/15/2017 | 4500 | Continue count| >2000 (2) | | 3344 | 9/15/2017 | 6000 | Continue count| >2000 (3) | | 3344 | 10/15/2017 | 7000 | Stop count| >3 in a row | | 3344 | 11/15/2017 | 8000 | Stop count| >3 in a row | | | | | | | 6678 | 8/15/2017 | 3000 | Count| >2000 (1) | | 6678 | 9/15/2017 | 4000 | Continue count| >2000 (2) | | 6678 | 10/15/2017 | 5000 | Continue count| >2000 (3) |
我还有一个包含营业地点开放日期的 loc_id 维度。
| loc_id | loc_open_dt |
|--------|-------------|
| 1234 | 2002-05-01 |
| 9987 | 2006-10-22 |
| 5544 | 2015-03-04 |
| 2223 | 2017-05-05 |
| 3344 | 2017-07-05 |
| 6678 | 2017-08-01 |
【问题讨论】:
-
如果在经过较长时间的 +2000 数量之后,它们再次更低,并且出现了一个新的 +2000 的 3 系列怎么办。那么该位置是否应该再次列出?如果某个位置恰好有 3 个连续的 +2000 金额,但之后金额又较低,是否应该在这些较低的月份继续列出?
-
第一个问题:是 - 如果在运行 3 次且 >2000 后 ID 跌至 2000 以下,则应再次列出该 ID。第二个问题:是的 - 如果一个 ID 正好有 3 个 >2000,那么在第 4 个月下降到
-
使用 group by 聚合表达式:
https://www.postgresql.org/docs/9.4/static/sql-expressions.html#SYNTAX-AGGREGATES -
@JustMe URL 不存在
-
@psrpsrpsr postgresql.org/docs/9.4/static/…
标签: sql postgresql