我有以下sql语句:SELECT FL.*
FROM AIDSZH_SGRA_ADULT_FLW FL,
(SELECT CARD_ID,
MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
FROM AIDSZH_SGRA_ADULT_FLW F
WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
AND F.ZONECODE LIKE '371081%'
GROUP BY F.CARD_ID) FMAX
WHERE ((TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd')) || FL.FLWNO) = FMAX.DT_FLWORINTERP
AND FL.CARD_ID = FMAX.CARD_ID大意是这样的:我想取DT_FLWORINTERP最大的那条记录。如果DT_FLWORINTERP最大值有多条记录,那么我将会取这几条记录中flw最大的那条记录,以保证取出记录的唯一性,上述sql过于复杂,不易于维护。所以我想用分析函数来满足以上需求,多谢大家帮忙。
FROM AIDSZH_SGRA_ADULT_FLW FL,
(SELECT CARD_ID,
MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
FROM AIDSZH_SGRA_ADULT_FLW F
WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
AND F.ZONECODE LIKE '371081%'
GROUP BY F.CARD_ID) FMAX
WHERE ((TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd')) || FL.FLWNO) = FMAX.DT_FLWORINTERP
AND FL.CARD_ID = FMAX.CARD_ID大意是这样的:我想取DT_FLWORINTERP最大的那条记录。如果DT_FLWORINTERP最大值有多条记录,那么我将会取这几条记录中flw最大的那条记录,以保证取出记录的唯一性,上述sql过于复杂,不易于维护。所以我想用分析函数来满足以上需求,多谢大家帮忙。
解决方案 »
- oracle最初级的问题
- oracle参数配置
- 有会用oracle自定义函数的朋友吗?
- 请教高难度oracle语句列转行问题.
- 如果想统计每个小时有几条记录,sql要怎么写啊!
- oracle初学者的问题
- ORA-12560:TNS:协议适配器错误。
- 怎样查询客户端程序所有执行错误,请高手指教,分数不是问题
- 请问:我写了一个包,然后spl/plus中定义一句DECLARE RetVal pkg_test.myrctype;执行后提示:未定义赋值变量,我如何测试写的包?谢谢(在线等
- 请问有没有类似group by 相对于字串的加总功能!
- 有谁能帮忙由优化这个sql,多谢啦。
- oracle xmldb 信息库 问题!
MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP,
max(zonecode)keep(dense_rank last order by F.DT_FLWORINTERP,F.FLWNO)zonecode,
max(col1)keep(dense_rank last order by F.DT_FLWORINTERP,F.FLWNO)col1,
max(col2)keep...............
FROM AIDSZH_SGRA_ADULT_FLW F
WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
AND F.ZONECODE LIKE '371081%'
GROUP BY F.CARD_ID改成这样试试。keep
select * from(
select f.*,row_number()over(partition by card_id order by DT_FLWORINTERP desc,FLWNO desc)rn
from AIDSZH_SGRA_ADULT_FLW f)
where rn=1比较一下执行计划