我有一个日期列表,我想找出一年中最早出现的日期,我使用了密集列函数仅提取日期和月份,但是我无法获取它返回等于1(可能有多个最早的日期,而不仅仅是一个)。
SELECT
S.SG_HOSTCITY,
C.COUNTRY_OLYMPIC_CODE,
DENSE_RANK() OVER (ORDER BY to_char(S.SG_START, 'MMDD')) AS RN
FROM
SUMMERGAMES S,
COUNTRY C
WHERE
S.COUNTRY_ISOCODE = C.COUNTRY_ISOCODE
RN = 1
ORDER BY RN;
只是吐出00933。00000-“ SQL命令未正确结束”
有人可以帮忙吗?我不知道我在做什么错。
将其放入内联视图:
select SG_HOSTCITY, COUNTRY_OLYMPIC_CODE
from (SELECT S.SG_HOSTCITY,
C.COUNTRY_OLYMPIC_CODE,
DENSE_RANK() OVER(ORDER BY to_char(S.SG_START, 'MMDD')) AS RN
FROM SUMMERGAMES S
join COUNTRY C
on S.COUNTRY_ISOCODE = C.COUNTRY_ISOCODE)
WHERE RN = 1
您不能使用WHERE子句来过滤同一查询中分析函数的输出值。您必须将其放入子查询中。以上与您当前的查询相同,但没有语法错误。
但是我不知道它是否真的会给您期望的输出。我也可以尝试:
select *
from (SELECT S.SG_HOSTCITY,
C.COUNTRY_OLYMPIC_CODE,
DENSE_RANK() OVER( partition by TRUNC(S.SG_START, 'YYYY')
order BY TRUNC(S.SG_START) ) AS RN
FROM SUMMERGAMES S
join COUNTRY C
on S.COUNTRY_ISOCODE = C.COUNTRY_ISOCODE)
WHERE RN = 1
这将为您提供与每年相关的第一个SG_START日期的SG_HOSTCITY和COUNTRY_OLYMPIC_CODE的组合。例如,如果2002年的第一年是1/5,并且2002年的那个日期有5个这样的SG_HOSTCITY和COUNTRY_OLYMPIC_CODE值落入该日期,那么它将显示该年的所有5个,因为它将恢复联系。
所不同的是,排名会上升,然后在每年的变化中重新开始,而不是在所有年份中都变化(请注意分区)。
我在想上面的第二个查询是您真正想要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句