组中使用Row_Number()的组中的where子句中的最小值

问题描述 投票:0回答:1

我有以下查询,该查询从表COE3REL1中选择数据。在select语句中,它将cyymmdd转换为yyyy-mm-dd。在屏幕快照中,左边的表是输出电流,右边的表是期望的结果。我需要修改where子句,以便它仅在Subscription E3BXDT组中选择最小ID号。我可以通过输出创建表来执行此操作,然后写一个group by并从创建的表中选择min(ID),但是我需要在1个sql查询中进行操作。

任何支持将不胜感激

谢谢

select 
E3B8NB as "Subscription"    
,date((((int(E3BXDT)/10000)+1900)|| '-' ||
(MOD(int(E3BXDT),10000) /100)|| '-' ||
MOD(int(E3BXDT),100)))  "ST Effective Date" 
,E3B6CD as "Tariff"
,ROW_NUMBER() over(order by E3B8NB) as ID
from  DISEBTRD.COE3REL1
where E3BXDT > 1000000 
order by E3B8NB,E3BXDT desc

enter image description here

mysql sql
1个回答
0
投票

订阅上带有分区的row_number可以在这里提供帮助。然后将其包装在子查询中,并在外部查询中进行过滤。

SELECT 
  "Subscription"
, "ST Effective Date"
, "Tariff"
, "ID"
FROM
(
    SELECT E3B8NB AS "Subscription"
    , date((((int(E3BXDT)/10000)+1900)|| '-' || (MOD(int(E3BXDT),10000) /100)|| '-' || MOD(int(E3BXDT),100))) AS "ST Effective Date" 
    , E3B6CD AS Tariff
    , ROW_NUMBER() OVER(ORDER BY E3B8NB, int(E3BXDT)) AS "ID"
    , ROW_NUMBER() OVER(PARTITION BY E3B8NB ORDER BY int(E3BXDT)) AS RN
    FROM DISEBTRD.COE3REL1
    WHERE E3BXDT > 1000000
) q
WHERE RN = 1
ORDER BY "ID"
© www.soinside.com 2019 - 2024. All rights reserved.