首页 > 解决方案 > 简单的 SQL 子查询

问题描述

当谈到 SQL 时,我似乎是个彻头彻尾的白痴....

我需要的只是从另一个表中获取一个值,但是第二个表上有多个具有相同 customerId 的行.. 我需要得到一个时间戳最高的行

CREATE OR REPLACE VIEW CUS_SETTINGS as
SELECT 
c.id as id,
c.LANG as Language,
c.ALLOWEMAIL as AllowEmail,
l.CONFIRMED as confirmed

FROM cus.CUSTOMER c
????? something with l
/

LEFT JOIN 将带来每一行,所以我有多个重复的 id 我需要的是适当的子查询,但我无法让它工作......

(SELECT CONFIRMED FROM settings WHERE ?? c.id == l.id ?? AND MAX(TIMESTAMP) )

我已经尝试了许多连接和子查询的变体.. 但出于某种原因.. SQL 太令人困惑了....

标签: sqloraclesubquery

解决方案


您可以使用分析函数。MAX() OVER(PARTITION BY)子句可以为您提供最大时间戳 id。

分析函数文档 11gR2

SELECT SECONDD.CONFIRMED
FROM CUSTOMER CU
   INNER JOIN
   (SELECT 
           *
      FROM (SELECT SECONDD.*,
                   MAX (S.TIMESTAMP) OVER (PARTITION BY S.ID)
                      AS MAXTIMESTAMP
              FROM SETTINGS SECONDD)
     WHERE TIMESTAMP = MAXTIMESTAMP) SECONDD
      ON SECONDD.ID = CU.ID

推荐阅读