sql - 获取每个条目的最新记录

标签 sql sql-server

我有一个表格,其中显示某个产品何时被其他产品替换,并且该其他产品也可能出现在该表格中。

我想知道如何在给定产品的情况下编写查询,以获得最新的可用(替换)产品。

示例:

    Product_From   Product_To
    -------------------------
    A              E
    A              D
    B              F
    C              B
    D              F
    D              G

如何通过查询获得以下输出:

    Product_From   Product_Final
    -------------------------
    A              E
    A              F
    A              G
    B              F
    C              F
    D              F
    D              G

产品 A 被产品 D 和 E 替换,但产品 D 被 F 和 G 替换,因此产品 A 将产品 E、F 和 G 作为“最终产品”。

问题是产品可以有不同的替换条目,因此我不知道我需要多少个 JOINS...

最佳答案

您可以使用自左连接来做到这一点:

select 
  p1.product_from,
  coalesce(p2.product_to, p1.product_to) product_final 
from products p1 left join products p2 
on p2.product_from = p1.product_to 

请参阅demo .
结果:

> product_from | product_final
> :----------- | :------------
> A            | E            
> A            | F            
> A            | G            
> B            | F            
> C            | F            
> D            | F            
> D            | G 

关于sql - 获取每个条目的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957995/

相关文章:

php - 数组转换为 mysql 列语法

sql-server - 外键引用无效表。但为什么

MySQL 查询不显示重复的 id

mysql - n :m relation with many records that are just 1m correctly approach

.net - SQL Server 中的 Service Broker 是什么?

c# - dapper 执行存储过程时将数据类型日期时间转换为小日期时间时出错

Sql Select top 2, bottom 2 and 6 随机记录

mysql - MSSQL 到远程 MySQL 700k 行

php - 尝试将键值插入 MySQL 表时出错

sql - 如何在 SQL 中选择具有最新日期的行?