急求一个sql语句。

Son_of_a_bitch 2016-02-18 05:06:42
我要先ORDER BY,再GROUP BY。
...全文
187 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2016-02-19
  • 打赏
  • 举报
回复


create table test(bj varchar(10) , crdate datetime)
go
insert into test values
('1班','2016-2-19 08:48:30'),
('5班','2016-2-19 07:48:30'),
('4班','2016-2-19 06:48:30'),
('3班','2016-2-19 05:48:30'),
('2班','2016-2-19 04:48:30'),
('1班','2016-2-19 03:48:30'),
('4班','2016-2-19 02:48:30'),
('4班','2016-2-19 01:48:30'),
('3班','2016-2-18 21:48:30'),
('1班','2016-2-18 17:48:30')
go
with m as (
select row_number() over(partition by bj order by crdate desc) rn,
       dense_rank() over(order by crdate desc) rn2,
       *
from test
)
select test.* from m inner join test on m.bj = test.bj 
where m.rn = 1 
order by m.rn2 , m.crdate
go
drop table test 
go


(10 行受影响)
bj         crdate
---------- -----------------------
1班         2016-02-19 08:48:30.000
1班         2016-02-19 03:48:30.000
1班         2016-02-18 17:48:30.000
5班         2016-02-19 07:48:30.000
4班         2016-02-19 06:48:30.000
4班         2016-02-19 02:48:30.000
4班         2016-02-19 01:48:30.000
3班         2016-02-19 05:48:30.000
3班         2016-02-18 21:48:30.000
2班         2016-02-19 04:48:30.000

(10 行受影响)


Son_of_a_bitch 2016-02-19
  • 打赏
  • 举报
回复
引用 12 楼 xiaoxiangqing 的回复:
要给出数据,以及需要的结果
都给出了,帮忙看看
Son_of_a_bitch 2016-02-19
  • 打赏
  • 举报
回复
引用 11 楼 wmxcn2000 的回复:
你想要的结果,也给出一个这样的表格吧。
1班 2016-2-19 08:48:30 1班 2016-2-19 03:48:30 1班 2016-2-18 17:48:30 5班 2016-2-19 07:48:30 4班 2016-2-19 06:48:30 4班 2016-2-19 02:48:30 4班 2016-2-19 01:48:30 3班 2016-2-19 05:48:30 3班 2016-2-18 21:48:30 2班 2016-2-19 04:48:30 我表达能力这么差吗。。。 跟同事商量好久都说一个sql完成不了。可是我必须用一个sql,怎么嵌套都无所谓。。。
xiaoxiangqing 2016-02-19
  • 打赏
  • 举报
回复
要给出数据,以及需要的结果
卖水果的net 2016-02-19
  • 打赏
  • 举报
回复
你想要的结果,也给出一个这样的表格吧。
Son_of_a_bitch 2016-02-19
  • 打赏
  • 举报
回复
引用 9 楼 wmxcn2000 的回复:
你给出一些示例数据,再给出你想要的结果,这样方便给你写语句。
1班 2016-2-19 08:48:30 5班 2016-2-19 07:48:30 4班 2016-2-19 06:48:30 3班 2016-2-19 05:48:30 2班 2016-2-19 04:48:30 1班 2016-2-19 03:48:30 4班 2016-2-19 02:48:30 4班 2016-2-19 01:48:30 3班 2016-2-18 21:48:30 1班 2016-2-18 17:48:30 编了这些数据。这个结果是order by 提交时间 的结果。 但是看到1班最近提了一个需求,之前也提过一个需求。要求显示的是,距离现在最近的是1班的需求,要求把1班的所有需求都显示在最前面。如果2班又提了需求,那就2班的所有需求在最前面。
卖水果的net 2016-02-19
  • 打赏
  • 举报
回复
你给出一些示例数据,再给出你想要的结果,这样方便给你写语句。
Son_of_a_bitch 2016-02-19
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:


order by 提交时间 desc ,班级  -- desc 可以把最近的放在前面

不好意思,不行真的。看: order by 時間 DESC,班級 因為班級是重複又比較亂的,其實這樣的結果跟order by 時間 沒區別,還是只是按時間排序。 並不能達到先显示最近提交的班级的所有需求的。
卖水果的net 2016-02-18
  • 打赏
  • 举报
回复
但是客户提出需求,先按提交时间排,再按班级排。而这两个又不能同时order by。 这个需求,就是

order by 提交时间,班级  -- 这里写两个字段,用逗号分开就可以了。
卖水果的net 2016-02-18
  • 打赏
  • 举报
回复


order by 提交时间 desc ,班级  -- desc 可以把最近的放在前面

Ekun_sky 2016-02-18
  • 打赏
  • 举报
回复
截图,模仿个效果出来,那样方便解决问题!
Son_of_a_bitch 2016-02-18
  • 打赏
  • 举报
回复
我知道这样不行,但是想要一个sql能达到这个效果。 这样说吧,我有一个需求表,其中有两个字段 ‘班级’,‘提交时间’。 不同的班级提出需求,记录到数据库。所以导致数据中肯定有许多班级提交的需求。我又需要把数据输出出来,提出时间最近的在最前面。 但是客户提出需求,先按提交时间排,再按班级排。而这两个又不能同时order by。 比如说有个班级之前提出需求,过了段时间,输出的时候这个班级的需求肯定在后面,这时这个班级又提出需求,那么显示的时候,要求这个班级的所有需求都在最前面。 求教sql语句。只要一个sql。
Ekun_sky 2016-02-18
  • 打赏
  • 举报
回复
可能楼主没理解 group by 分组,group by 分组 不是按数据原的顺序来分组的!
shoppo0505 2016-02-18
  • 打赏
  • 举报
回复
ORDER 只能放最后,于法规定的
Ginnnnnnnn 2016-02-18
  • 打赏
  • 举报
回复
order by 和group by 本身不矛盾,然后你到底是需要什么?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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