我有以下查询,该查询从表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
订阅上带有分区的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"