sql 分组排序问题

the7thsense 2007-07-11 10:18:23
要以组内某个列的最大值给组排序
具体为每个组中一个日期类型列,根据每个组中的最大日期对分组进行到序排列
想实现效果是
分组列 日期列
222 2007-01-01
222 2007-01-02
222 2007-05-05
111 2007-01-10
111 2007-02-02
333 2007-01-01
...全文
1002 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangqiao 2007-07-11
  • 打赏
  • 举报
回复

select gop,dat from
(
select gop,dat,max(dat)over(partition by gop)c from b
)order by c,gop
the7thsense 2007-07-11
  • 打赏
  • 举报
回复
非常感谢上面各位,结贴了
the7thsense 2007-07-11
  • 打赏
  • 举报
回复
可以了,晕,本来要排序的表就是一个大select连接几个表又分组出来的,现在还要自身连接在排序,恐怕会被以后维护的人员骂了。
the7thsense 2007-07-11
  • 打赏
  • 举报
回复
正在试
临摹 2007-07-11
  • 打赏
  • 举报
回复
那是我理解错了,我以为是首先按分组列里面个数最多的首先排序呢,如果按日期最大的首先排序,就和bjt_(bjt) 那样,把COUNT(GOP)改成max(dat)吧
icefirelxb 2007-07-11
  • 打赏
  • 举报
回复
每组的最大值从大到小,组内又要求从小到大,呵呵,感觉有难度
bjt_ 2007-07-11
  • 打赏
  • 举报
回复
COUNT(GOP)改成max(dat)即可

SELECT T1.GOP,TO_CHAR(DAT,'YYYY-MM-DD') FROM TABLE1 T1,
(SELECT GOP,max(dat) CGOP FROM TABLE1 GROUP BY GOP) T2
WHERE T1.GOP=T2.GOP ORDER BY CGOP DESC,DAT;
the7thsense 2007-07-11
  • 打赏
  • 举报
回复
不是的,跟组内记录的多少没关系,要看本组内的最大的日期,最大日期最大的一组排在最前面
WangZWang 2007-07-11
  • 打赏
  • 举报
回复
Select a.* from tb a inner Join (
Select 分组列,max(日期列) 日期列 from tb group by 分组列
Order by 日期列 desc ) b on a.分组列=b.分组列
order by b.日期列 desc,a.日期列
临摹 2007-07-11
  • 打赏
  • 举报
回复
CREATE TABLE TABLE1(GOP INTEGER,DAT DATE);
INSERT INTO TABLE1 VALUES(333,TO_DATE('2007-01-01','YYYY-MM-DD'));
INSERT INTO TABLE1 VALUES(222,TO_DATE('2007-01-02','YYYY-MM-DD'));
INSERT INTO TABLE1 VALUES(111,TO_DATE('2007-02-02','YYYY-MM-DD'));
INSERT INTO TABLE1 VALUES(222,TO_DATE('2007-05-05','YYYY-MM-DD'));
INSERT INTO TABLE1 VALUES(222,TO_DATE('2007-01-01','YYYY-MM-DD'));
INSERT INTO TABLE1 VALUES(111,TO_DATE('2007-01-10','YYYY-MM-DD'));
COMMIT;
SQL> SELECT GOP,TO_CHAR(DAT,'YYYY-MM-DD') FROM TABLE1;

GOP TO_CHAR(DA
---------- ----------
333 2007-01-01
222 2007-01-02
111 2007-02-02
222 2007-05-05
222 2007-01-01
111 2007-01-10

已选择6行。
SELECT T1.GOP,TO_CHAR(DAT,'YYYY-MM-DD') FROM TABLE1 T1,
(SELECT GOP,COUNT(GOP) CGOP FROM TABLE1 GROUP BY GOP) T2
WHERE T1.GOP=T2.GOP ORDER BY CGOP DESC,DAT;

GOP TO_CHAR(DA
---------- ----------
222 2007-01-01
222 2007-01-02
222 2007-05-05
111 2007-01-10
111 2007-02-02
333 2007-01-01

已选择6行。

这个意思吗?
hongqi162 2007-07-11
  • 打赏
  • 举报
回复
这样可以吗


select * from t group by cid,cdate order by cid,cdate asc

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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