partition by的用法
来源:互联网 发布:mac照片找不到 编辑:程序博客网 时间:2024/05/29 21:36
需求:之前是时间倒序显示所有栏目的文章,要求改成时间倒序显示各栏目最新的一篇文章
分析:分组的SQL有2个 group by 和partition by,
如果使用 group by:
select max(publish_date),column_id from NP_CMS_MAIN group by column_id order by max(publish_date)
只能取得发布时间和栏目ID两个字段,可是我要取得文章标题
改成这样:
select max(title),max(publish_date),column_id from NP_CMS_MAIN group by column_id order by max(publish_date)
但是max(title)导致了不是取得各栏目最近时间的
所以想想用partition by来实现。
group by更强调的是一个整体,就是组,只能显示一个组里满足聚合函数的一条记录, partition by 在整体后更强调个体,能显示组里所有个体的记录,
我们想得到组里的满足条件的记录可以用where条件进行筛选,而不需要聚合函数。
原SQL:
SELECT T.* FROM NP_CMS_MAIN T WHERET.STATUS = 9 AND T.IS_ACTIVE=1 ANDCONTENT_TYPE<2 AND (OVERDUE_DATE IS NULL or OVERDUE_DATE>='2016-12-16 11:30:00') AND T.IS_ANON = 1 ) order by t.PUBLISH_DATE desc
使用row_number() over(partition by T.COLUMN_ID order by T.PUBLISH_DATE desc)开窗函数给分组里的记录进行排序编号
SELECT T1.MAIN_ID,T1.TITLE FROM (SELECT T.MAIN_ID,T.TITLE,T.PUBLISH_DATE,row_number() over(partition by T.COLUMN_ID order by T.PUBLISH_DATE desc) rn FROM NP_CMS_MAIN T WHERE T.STATUS = 9 AND T.IS_ACTIVE=1 AND CONTENT_TYPE<2 AND (OVERDUE_DATE IS NULL or OVERDUE_DATE>='2016-12-16 11:30:00') AND T.IS_ANON = 1) AS T1WHERE T1.rn = 1ORDER BY T1.PUBLISH_DATE DESC
WHERE T1.rn = 1使用行号等于1筛选出组里最近发布的文章
1 0
- partition by的用法
- partition by 的用法
- partition by的用法
- partition by的用法
- SQL PARTITION BY的用法
- 一则over(partition by )的用法
- SqlServer 中 partition by 的用法
- sum over partition by 的用法
- partition by 用法
- over partition by 用法
- row_number() over(partition by xxx order by xxx)的用法
- row_number() over(partition by col1 order by col2)的用法
- ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)的用法
- Row_number () over (partition by col1 order by col2)的用法
- over(Partition by...) 详细用法
- OVER(PARTITION BY)函数用法
- over(Partition by...) 详细用法
- OVER(PARTITION BY)函数用法
- Git教程
- js瀑布流,简单封装
- android 按钮点击的两种方法以及长按事件
- 博客
- 《剑指offer》之二叉树专题
- partition by的用法
- 基于图的任务流引擎GraphScheduleEngine
- 普通
- TOMCAT部署项目
- Java多线程详解
- mybatis快速入门(一)
- 五次方数
- iOS 隐藏statusbar
- Spring AOP 实现原理