首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql -如何识别2列组合的最新记录(例如内部)

Postgresql -如何识别2列组合的最新记录(例如内部)
EN

Stack Overflow用户
提问于 2020-03-16 16:11:36
回答 1查看 45关注 0票数 0

在PostgreSQL中,如果我有这样的记录:

代码语言:javascript
复制
|------------------|---------------------|------------------|
|  corona_country  |   corona_patient    | corona_suspected |
|------------------|---------------------|------------------|
|     Mexico       |        Teddy        |    2020-03-01    |
|------------------|---------------------|------------------|
|     Indonesia    |        Andy         |    2020-03-01    |
|------------------|---------------------|------------------|
|     Indonesia    |        Andy         |    2020-03-05    |
|------------------|---------------------|------------------|
|     China        |        Sarah        |    2020-03-04    |
|------------------|---------------------|------------------|
|     UK           |        Michael      |    2020-03-05    |
|------------------|---------------------|------------------|
|     Italy        |        Michael      |    2020-03-15    |
|------------------|---------------------|------------------|
|     Italy        |        Michael      |    2020-03-15    |
|------------------|---------------------|------------------|

我想添加额外的列(通过选择查询)来标识corona_country和corona_patient的组合是否在自己的记录中有最新的日期( corona_suspected列)。看起来是这样的:

代码语言:javascript
复制
|------------------|---------------------|------------------|-----------|
|  corona_country  |   corona_patient    | corona_suspected |  LATEST?  |
|------------------|---------------------|------------------|-----------|
|     Mexico       |        Teddy        |    2020-03-01    |     Y     |
|------------------|---------------------|------------------|-----------|
|     Indonesia    |        Andy         |    2020-03-01    |     N     |
|------------------|---------------------|------------------|-----------|
|     Indonesia    |        Andy         |    2020-03-05    |     Y     |
|------------------|---------------------|------------------|-----------|
|     China        |        Sarah        |    2020-03-04    |     Y     |
|------------------|---------------------|------------------|-----------|
|     UK           |        Michael      |    2020-03-05    |     Y     |
|------------------|---------------------|------------------|-----------|
|     Italy        |        Michael      |    2020-03-13    |     N     |
|------------------|---------------------|------------------|-----------|
|     Italy        |        Michael      |    2020-03-15    |     Y     |
|------------------|---------------------|------------------|-----------|
|     Italy        |        Michael      |    2020-03-15    |     Y     |
|------------------|---------------------|------------------|-----------|

如何通过sql查询实现这一点?是否有任何方法连接另一个表,该表记录corona_country和corona_patient的每个组合的最新日期?

EN

回答 1

Stack Overflow用户

发布于 2020-03-16 16:13:24

使用窗口函数:

代码语言:javascript
复制
select t.*,
       (rank() over (partition by corona_country, corona_patient order by corono_suspected desc) = 1
       ) as is_latest
from t;

请注意,这将创建一个布尔值。如果您想要字符串,请使用case

代码语言:javascript
复制
select t.*,
       (case when rank() over (partition by corona_country, corona_patient order by corono_suspected desc) = 1
             then 'Y' else 'N'
        end) as is_latest
from t;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60709444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档