【发布时间】:2021-04-06 20:52:17
【问题描述】:
我正在尝试做一些我认为很简单但正确设置它的问题(使用 Redshift)。
create temporary table tmpTest (
guid int,
date date,
eligible boolean
);
insert into tmpTest
values (1,'2021-01-01',TRUE),
(1,'2021-01-02',TRUE),
(1,'2021-01-03',FALSE),
(1,'2021-01-04',TRUE),
(2,'2021-01-01',TRUE),
(2,'2021-01-02',FALSE),
(2,'2021-01-03',TRUE),
(2,'2021-01-04',TRUE);
从这个表中,我希望在第 4 列中生成以下内容,该列从 1 开始,对于每个新的 guid,在最新的日期 desc 中。然后每个真/假的数字翻转,直到它到达下一个 guid 并重新开始。
| guid | date | eligible | rank |
|---|---|---|---|
| 1 | 2021-01-01 | TRUE | 3 |
| 1 | 2021-01-02 | TRUE | 3 |
| 1 | 2021-01-03 | FALSE | 2 |
| 1 | 2021-01-04 | TRUE | 1 |
| 2 | 2021-01-01 | TRUE | 3 |
| 2 | 2021-01-02 | FALSE | 2 |
| 2 | 2021-01-03 | TRUE | 1 |
| 2 | 2021-01-04 | TRUE | 1 |
这样做的原因是拉出排名为 1 的所有行,向我显示 guid 每天连续标记为 TRUE 的最新记录。我尝试了各种配置中的 dense_rank() 无济于事......
| guid | date | eligible | rank |
|---|---|---|---|
| 1 | 2021-01-04 | TRUE | 1 |
| 2 | 2021-01-03 | TRUE | 1 |
| 2 | 2021-01-04 | TRUE | 1 |
【问题讨论】:
-
Redshift 还是 Postgres?尽管它们有一些古老的相似之处,但它们是截然不同的产品。
-
这是 Redshift 数据库 - 我将两者都放在以防万一,因为我不确定我要解决的问题是否存在语法差异。我遇到了一些非常不同的事情,而另一些则没有那么多。
标签: sql amazon-redshift