【发布时间】:2017-05-29 08:26:30
【问题描述】:
我认为这很简单,但是我无法使用分区或分组方式让它工作。我需要获取两个暗键中较低的一个,但是我仍然需要获取区域暗键,因为我在此子查询之外的另一部分查询中使用它。
SELECT
ac.ACCOUNT_DIM_KEY,
iid.CUST_ID,
ter.TERRITORY_DIM_KEY,
ROW_NUMBER() OVER (PARTITION BY iid.CUST_ID ORDER BY ac.ACCOUNT_DIM_KEY) AS MIN_ACCT_KEY
FROM DEXODS.OPUB_MDM_CCV_ID iid,
DEXWHS.D_ACCOUNT_VEEVA ac,
DEXWHS.D_TERRITORY ter
WHERE ac.IMS_ID = iid.VAL_1_ID
AND SUBSTR(ac.PRIMARY_TERRITORY, 1, 8) = ter.TERRITORY_CODE
AND ac.ACTIVE_FLAG = 'Y'
AND iid.SCNDY_ID_TYP_XID = 202325
AND iid.cust_id = '53050249'
AND MIN_ACCT_KEY= 1
我想要的结果是只返回帐户暗键 307070
ACCOUNT_DIM_KEY CUST_ID TERRITORY_DIM_KEY MIN_ACCT_KEY
307070 53050249 -3 1
2565820 53050249 43 2
非常感谢任何帮助!
【问题讨论】:
-
你会输入样本数据吗
-
ACCOUNT_DIM_KEY CUST_ID TERRITORY_DIM_KEY 2565820 53050249 43 307070 53050249 -3 我想要的结果是只返回 account_dim_key 307070(抱歉,这包含在所附图片中)
-
但是你会选择哪个区域的暗键:43 还是 -3?
-
哪个 RDBMS? SQL Server、oracle、postgresql、Mysql?如果数据库支持窗口函数,那么您将使用
ROW_NUMBER() (PARTITION BY iid.CUST_ID, ORDER BY ac.ACCOUNT_DIM_KEY),然后选择 where that = 1。如果不支持,您将执行子查询以找到最小值account_dim_key,然后返回相关以获取其余详细信息记录 -
@Matt 我更新了代码以使用行号分区但是,当我尝试添加 where min_acct_key = 1 时,我得到一个无效的标识符错误。我也尝试将其作为 subqery,但得到相同的错误。这是在 oracle 数据库中。我错过了什么?