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

测试数据

VINNumber                             ChannelID   TimeStamp
604356ad-54da-4155-afb1-5    01       2015-05-27 10:57:00
604356ad-54da-4155-afb1-5    03       2015-05-27 10:42:00
604356ad-54da-4155-afb1-5    05       2015-05-27 10:43:00
604356ad-54da-4155-afb1-5    04       2015-05-27 10:50:00
604356ad-54da-4155-afb1-5    02       2015-05-27 10:77:00
dcadaed8-af22-4602-b85b-f     01       2015-05-27 11:56:00
dcadaed8-af22-4602-b85b-f     03       2015-05-27 11:53:00
dcadaed8-af22-4602-b85b-f     02       2015-05-27 11:54:00
dcadaed8-af22-4602-b85b-f     04       2015-05-27 11:55:00
dcadaed8-af22-4602-b85b-f     05       2015-05-27 11:56:00
53089042-ed6c-480f-acc8-c   01       2015-05-27 12:57:00
53089042-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:00
53089042-ed6c-480f-acc8-c     02       2015-05-27 12:57:00

dcadaed8-af22-4602-b85b-f     01       2015-05-27 11:56:00
dcadaed8-af22-4602-b85b-f     02       2015-05-27 11:53:00
dcadaed8-af22-4602-b85b-f     03       2015-05-27 11:54:00
dcadaed8-af22-4602-b85b-f     04       2015-05-27 11:55:00
dcadaed8-af22-4602-b85b-f     05       2015-05-27 11:56:00

604356ad-54da-4155-afb1-5    01       2015-05-27 10:57:00
604356ad-54da-4155-afb1-5    02       2015-05-27 10:42:00
604356ad-54da-4155-afb1-5    03       2015-05-27 10:43:00
604356ad-54da-4155-afb1-5    04       2015-05-27 10:50:00
604356ad-54da-4155-afb1-5    05       2015-05-27 10:77:00

一只甜甜圈
浏览 931回答 5
5回答

慕码人2483693

从结果集来看,并不需要用到分组,写法: select * from t order by t.TimeStamp DESC,t.VINNumber,t.ChannelID

富国沪深

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

天涯尽头无女友

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

手掌心

1 2015-05-27 11:01:00 02 09ff8127-54e1-40e2-899c-d2 2015-05-27 11:01:00 03 09ff8127-54e1-40e2-899c-d3 2015-05-27 11:01:00 04 09ff8127-54e1-40e2-899c-d4 2015-05-27 11:01:00 05 09ff8127-54e1-40e2-899c-d5 2015-05-27 11:00:00 01 09ff8127-54e1-40e2-899c-d1 2015-05-27 10:57:00 01 53089042-ed6c-480f-acc8-c2 2015-05-27 10:57:00 02 53089042-ed6c-480f-acc8-c3 2015-05-27 10:57:00 03 53089042-ed6c-480f-acc8-c4 2015-05-27 10:57:00 04 53089042-ed6c-480f-acc8-c5 2015-05-27 10:57:00 05 53089042-ed6c-480f-acc8-c 你的 SQL 中 让 TimeStamp 与 ChannelID 排序时,就是错误的。

皈依舞

1 2015-05-27 11:01:00 02 09ff8127-54e1-40e2-899c-d2 2015-05-27 11:01:00 03 09ff8127-54e1-40e2-899c-d3 2015-05-27 11:01:00 04 09ff8127-54e1-40e2-899c-d4 2015-05-27 11:01:00 05 09ff8127-54e1-40e2-899c-d5 2015-05-27 11:00:00 01 09ff8127-54e1-40e2-899c-d1 2015-05-27 10:57:00 01 53089042-ed6c-480f-acc8-c2 2015-05-27 10:57:00 02 53089042-ed6c-480f-acc8-c3 2015-05-27 10:57:00 03 53089042-ed6c-480f-acc8-c4 2015-05-27 10:57:00 04 53089042-ed6c-480f-acc8-c5 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server