【发布时间】:2021-04-27 00:34:15
【问题描述】:
这应该是一个很容易解决的问题,但由于某种原因,我无法理解如何有效地做到这一点......
假设我有一个如下所示的表 (postgres):
| id | date | value |
|---|---|---|
| 1 | 2021-04-01 | 1 |
| 1 | 2021-04-03 | 10 |
| 1 | 2021-04-04 | 8 |
| 1 | 2021-04-05 | 3 |
| 1 | 2021-04-08 | 5 |
| 2 | 2021-04-04 | 3 |
| 2 | 2021-04-05 | 5 |
| 2 | 2021-04-07 | 5 |
| 2 | 2021-04-10 | 9 |
| 2 | 2021-04-12 | 11 |
我的目标是为每个 id 提取 1 行,这是该 id 的最新记录。
此表需要注意的重要特征是,最近的日期(按 id)在不同的 id 中是不一样的。所以我不能简单地查询 max(date) 并使用它来查询数据。我必须首先找到每个 id 的最近日期,并使用它来查询数据。
成功的查询将导致以下响应:
| id | date | value |
|---|---|---|
| 1 | 2021-04-08 | 5 |
| 2 | 2021-04-12 | 11 |
我也在对大量数据进行此查询,因此该解决方案需要尽可能优化。
【问题讨论】:
标签: postgresql