为了账号安全,请及时绑定邮箱和手机立即绑定

SQL SERVER 2008 先排序,再分组,再排序 在线等。。。

SQL SERVER 2008 先排序,再分组,再排序 在线等。。。

一只甜甜圈 2018-12-07 05:12:15
测试数据 VINNumber                             ChannelID   TimeStamp604356ad-54da-4155-afb1-5    01       2015-05-27 10:57:00604356ad-54da-4155-afb1-5    03       2015-05-27 10:42:00604356ad-54da-4155-afb1-5    05       2015-05-27 10:43:00604356ad-54da-4155-afb1-5    04       2015-05-27 10:50:00604356ad-54da-4155-afb1-5    02       2015-05-27 10:77:00dcadaed8-af22-4602-b85b-f     01       2015-05-27 11:56:00dcadaed8-af22-4602-b85b-f     03       2015-05-27 11:53:00dcadaed8-af22-4602-b85b-f     02       2015-05-27 11:54:00dcadaed8-af22-4602-b85b-f     04       2015-05-27 11:55:00dcadaed8-af22-4602-b85b-f     05       2015-05-27 11:56:0053089042-ed6c-480f-acc8-c   01       2015-05-27 12:57:0053089042-ed6c-480f-acc8-c     02       2015-05-27 12:57:00 分组条件: 1.以字段 TimeStamp 倒序排序 2.以字段 VINNumber 分组 2.以字段 ChannelID 顺序排序 分组排序后的数据: VINNumber                             ChannelID   TimeStamp 53089042-ed6c-480f-acc8-c   01       2015-05-27 12:57:0053089042-ed6c-480f-acc8-c     02       2015-05-27 12:57:00 dcadaed8-af22-4602-b85b-f     01       2015-05-27 11:56:00dcadaed8-af22-4602-b85b-f     02       2015-05-27 11:53:00dcadaed8-af22-4602-b85b-f     03       2015-05-27 11:54:00dcadaed8-af22-4602-b85b-f     04       2015-05-27 11:55:00dcadaed8-af22-4602-b85b-f     05       2015-05-27 11:56:00 604356ad-54da-4155-afb1-5    01       2015-05-27 10:57:00604356ad-54da-4155-afb1-5    02       2015-05-27 10:42:00604356ad-54da-4155-afb1-5    03       2015-05-27 10:43:00604356ad-54da-4155-afb1-5    04       2015-05-27 10:50:00604356ad-54da-4155-afb1-5    05       2015-05-27 10:77:00
查看完整描述

5 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

从结果集来看,并不需要用到分组,写法:

select * from t order by t.TimeStamp DESC,t.VINNumber,t.ChannelID

查看完整回答
反对 回复 2019-01-07
?
富国沪深

TA贡献1790条经验 获得超9个赞

可以拆分成两步,先倒序排列timestamp,然后再执行2跟3

查看完整回答
反对 回复 2019-01-07
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

select  row_number() over( PARTITION BY VINNumber order by  TimeStamp  desc,ChannelID ) rid, * from  table

查看完整回答
反对 回复 2019-01-07
?
手掌心

TA贡献1942条经验 获得超3个赞

1 2015-05-27 11:01:00 02 09ff8127-54e1-40e2-899c-d
2 2015-05-27 11:01:00 03 09ff8127-54e1-40e2-899c-d
3 2015-05-27 11:01:00 04 09ff8127-54e1-40e2-899c-d
4 2015-05-27 11:01:00 05 09ff8127-54e1-40e2-899c-d
5 2015-05-27 11:00:00 01 09ff8127-54e1-40e2-899c-d
1 2015-05-27 10:57:00 01 53089042-ed6c-480f-acc8-c
2 2015-05-27 10:57:00 02 53089042-ed6c-480f-acc8-c
3 2015-05-27 10:57:00 03 53089042-ed6c-480f-acc8-c
4 2015-05-27 10:57:00 04 53089042-ed6c-480f-acc8-c
5 2015-05-27 10:57:00 05 53089042-ed6c-480f-acc8-c

你的 SQL 中 让 TimeStamp 与 ChannelID 排序时,就是错误的。

查看完整回答
反对 回复 2019-01-07
?
皈依舞

TA贡献1851条经验 获得超3个赞

1 2015-05-27 11:01:00 02 09ff8127-54e1-40e2-899c-d
2 2015-05-27 11:01:00 03 09ff8127-54e1-40e2-899c-d
3 2015-05-27 11:01:00 04 09ff8127-54e1-40e2-899c-d
4 2015-05-27 11:01:00 05 09ff8127-54e1-40e2-899c-d
5 2015-05-27 11:00:00 01 09ff8127-54e1-40e2-899c-d
1 2015-05-27 10:57:00 01 53089042-ed6c-480f-acc8-c
2 2015-05-27 10:57:00 02 53089042-ed6c-480f-acc8-c
3 2015-05-27 10:57:00 03 53089042-ed6c-480f-acc8-c
4 2015-05-27 10:57:00 04 53089042-ed6c-480f-acc8-c
5 2015-05-27 10:57:00 05 53089042-ed6c-480f-acc8-c

你的 SQL 中 让 TimeStamp 与 ChannelID 排序时,就是错误的。

当 TimeStamp 与 ChannelID 中的值不一样时,排序默认以你放在排序中的先后顺序决定的。

也就是你放在前面的 TimeStamp 决定最终的排序结果

例:

TimeStamp = 2015-05-27 11:00:00 和 ChannelID =01

TimeStamp = 2015-05-27 11:01:00 和 ChannelID =02

查看完整回答
反对 回复 2019-01-07
  • 5 回答
  • 0 关注
  • 930 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信