聽說這題難住大批高手,你也來試下吧。ps:博問里的博友提出的。
原始數據
select * from t_jeff t
簡單排序后數據
select
*
from
t_jeff t
order
by
t.VINNumber,t.channelid
desc
需求,根據VINNumber分組(每對連接一起) ,再根據ChannelID倒序
1、VINNumber同組的放一起
2、組之間排序邏輯:按照每組ChannelID最大值 倒序
3、組內排序:按照ChannelID倒序。
2、組之間排序邏輯:按照每組ChannelID最大值 倒序
3、組內排序:按照ChannelID倒序。
結果需要排列如圖
創建腳本
-
CREATE TABLE t_jeff (id int NOT NULL,VINNumber varchar(255) DEFAULT NULL,ChannelID varchar(255) DEFAULT NULL,TimeStamp datetime DEFAULT NULL,PRIMARY KEY (id)) ;INSERT INTO t_jeff VALUES ('1', 'Group3', '3', '2015-05-27 00:00:00');INSERT INTO t_jeff VALUES ('2', 'Group2', '5', '2015-05-23 00:00:00');INSERT INTO t_jeff VALUES ('3', 'Group1', '4', '2015-05-25 00:00:00');INSERT INTO t_jeff VALUES ('4', 'Group2', '3', '2015-05-29 00:00:00');INSERT INTO t_jeff VALUES ('7', 'Group1', '2', '2015-05-30 00:00:00');
怎么樣,有思路嗎,答案會在28號中午公布。
答案(通用)
SELECT i.* FROM ( SELECT VINNumber,max(j.ChannelID) AS MAXID FROM t_jeff j GROUP BY j.VINNumber ) m INNER JOIN t_jeff i ON i.VINNumber=m.VINNumber ORDER BY m.MAXID DESC,i.VINNumber, i.ChannelID DESC;
思路
先分組找出ChannelID的最大值,然后把它當作一個表,再進行關聯排序
SELECT VINNumber,max(j.ChannelID) AS MAXID FROM t_jeff j GROUP BY j.VINNumber (當作一個表)
這里要注意的是最后排序的順序
ORDER BY m.MAXID DESC,i.VINNumber, i.ChannelID DESC; (這三個排序一個都不能少)
總結
大部分博友的答案思路是對的,但后面排序有缺漏。統計了下,博友的答案里面完全符合題目要求的有4個,另外mssql里面的寫法有好幾種,而且答對的也有幾個。
最后感謝大家的答案,也讓我學到些不一樣的寫法,謝謝大家。
