sql,先后取多列最大值问题

小明code 2014-09-29 09:15:26
选出这个表中的所有记录,对于CO_NUM重复的记录,先筛选PAY_DATE最大那条记录,对于相同PAY_DATE的记录,则选出其LOG_ID的那条记录。
...全文
367 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小明code 2014-09-30
  • 打赏
  • 举报
回复
引用 2 楼 huaxin520 的回复:
SELECT RS.CO_NUM,
RS.PAY_DATE,
RS.LOG_ID
FROM (
SELECT T.CO_NUM,
T.PAY_DATE,
T.LOG_ID,
ROW_NUMBER() OVER(PARTITIONS BY T.CO_NUM, T.PAY_DATE ORDER BY T.PAY_DATE, T.LOG_ID) ROW_ID
FROM TABLE T
) RS
WHERE RS.ROW_ID = 1


好牛X的写法!
稍微改了一下你的sql(PARTITIONS改成 PARTITION,分组只用CO_NUM,排序增加PAY_DATE,LOG_ID降序),出来了我想要的结果。
修改后的sql:

SELECT
RS.CO_NUM, RS.PAY_DATE, RS.LOG_ID
FROM
( SELECT T.CO_NUM, T.PAY_DATE, T.LOG_ID,
ROW_NUMBER() OVER(PARTITION BY T.CO_NUM ORDER BY T.PAY_DATE DESC, T.LOG_ID DESC) ROW_ID
FROM EC_PAY_LOG_TEST1 T ) RS
WHERE
RS.ROW_ID = 1

表数据:

执行结果:
  • 打赏
  • 举报
回复
你好,你可以描述清楚一些,这样我们在写SQL帮你解决问题的时候比较方面定位.
huaxin520 2014-09-29
  • 打赏
  • 举报
回复
SELECT RS.CO_NUM, RS.PAY_DATE, RS.LOG_ID FROM ( SELECT T.CO_NUM, T.PAY_DATE, T.LOG_ID, ROW_NUMBER() OVER(PARTITIONS BY T.CO_NUM, T.PAY_DATE ORDER BY T.PAY_DATE, T.LOG_ID) ROW_ID FROM TABLE T ) RS WHERE RS.ROW_ID = 1

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧