如何从Oracle SQL的2个表中提取每个ID的最新记录。

12 浏览
0 Comments

如何从Oracle SQL的2个表中提取每个ID的最新记录。

我有两个表,分别命名为Productsold_product

sold_product表:

product_code    sold_date   product_id  product_rating
46077862546     18/08/21    380         3.5
41237862546     18/08/21    300         5.0
41237862789     06/08/21    356         4.0

Product表:

product_id  product_name    rack_no 
380         电视          5   
344         冰箱         4   
333         空调         6   

现在我需要根据product_code和product_name提取每个product_id的最新sold_date。

每个product_id在product表中只有一个唯一的条目。

0
0 Comments

问题原因:在Oracle SQL中,我们需要从两个表中提取每个ID的最新记录。然而,使用常规的SELECT语句无法得到我们想要的结果。

解决方法:我们可以使用子查询和MAX函数来解决这个问题。下面是解决方法的代码:

select ap.prid, ap.prcode, a.name, ap.MaxDate 
from product a,
    (select prCode, prid, max(soldDate) as MaxDate 
    from sold_product
    group by prid) ap 
where a.id = ap.prid;

这段代码首先创建了一个子查询。子查询使用MAX函数和GROUP BY子句,根据prid对sold_product表进行分组,并找到每个prid的最大soldDate。然后,主查询将product表和子查询连接起来,并通过prid将它们匹配起来。这样,我们就可以得到每个ID的最新记录。

希望这个解决方法对你有帮助!

0
0 Comments

问题原因:在Oracle SQL中,当我们需要从两个表中获取每个ID的最新记录时,我们可能会遇到困难。这是因为在使用JOIN操作连接两个表时,我们通常会得到多个匹配的记录,而不是每个ID的最新记录。

解决方法:为了解决这个问题,我们可以使用GROUP BY子句和MAX函数来获取每个ID的最新记录。通过将产品表和已售产品表进行左连接(LEFT JOIN),我们可以确保获取到所有产品的最新记录,即使某些产品没有销售记录。

以下是解决方法的代码示例:

select p.product_id, s.product_code, p.product_name, max(s.sold_date)
from product p
left join sold_product s on s.product_id = p.product_id
group by p.product_id, s.product_code, p.product_name

在以上代码中,我们首先选择了产品表(product)和已售产品表(sold_product)的相关列。然后,我们使用LEFT JOIN将这两个表连接起来,连接条件是产品ID(product_id)相等。

接下来,我们使用GROUP BY子句将结果按照产品ID、产品编码(product_code)和产品名称(product_name)进行分组。最后,我们使用MAX函数来获取每个分组(即每个产品ID)的最大销售日期(sold_date),即最新记录。

通过这种方法,我们可以从两个表中获取每个ID的最新记录,从而解决了这个问题。

0