首页 > 解决方案 > 返回 WHERE 子句不完全匹配的行

问题描述

我提前为问题标题道歉。我真的很难写出简洁的东西!

我有一个类似于以下的表:

| Item    | Date       | Value |
| A       | 2018-12-01 | 1     |
| B       | 2018-12-01 | 2     |
| C       | 2018-12-01 | 2     |
| A       | 2018-12-02 | 3     |
| B       | 2018-12-02 | 3     |

我想写一个查询,这样当我给它一个特定的日期时,它会为Item表中的每个唯一值返回一行,并且它Value在给定的日期,或者如果在给定的日期没有观察到,最后一次被观察到

因此,对于上表,如果我提供2018-12-01它将返回:

| Item    | Date       | Value |
| A       | 2018-12-01 | 1     |
| B       | 2018-12-01 | 2     |
| C       | 2018-12-01 | 2     |

但如果我提供2018-12-02它将返回:

| Item    | Date       | Value |
| A       | 2018-12-02 | 3     |
| B       | 2018-12-02 | 3     |
| C       | 2018-12-01 | 2     |

标签: sqlpostgresqlselect

解决方案


您可以使用distinct on

select distinct on (item) t.*
from t
where date <= $your_date
order by item, date desc;

推荐阅读