zoukankan      html  css  js  c++  java
  • 一道看似简单的sql需求却难倒各路高手

    转自:http://www.cnblogs.com/keguangqiang/p/4535046.html

    听说这题难住大批高手,你也来试下吧。ps:博问里的博友提出的。

    原始数据

    select * from t_jeff 

    简单排序后数据

    select from t_jeff order by t.VINNumber,t.channelid desc

    需求,根据VINNumber分组(每对连接一起) ,再根据ChannelID倒序

    1、VINNumber同组的放一起
    2、组之间排序逻辑:按照每组ChannelID最大值 倒序
    3、组内排序:按照ChannelID倒序。
    结果需要排列如图

     
    创建脚本
    1. CREATE TABLE t_jeff (
        id int NOT NULL,
        VINNumber varchar(255DEFAULT NULL,
       ChannelID varchar(255DEFAULT 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');
    怎么样,有思路吗
    select max_channel_in_group,id, vinnumber, channelid, timestamp
    from (
        select id, vinnumber, channelid, timestamp, max_channel_in_group = max(channelid) over(partition by vinnumber)
        from t_jeff
    ) t
    order by max_channel_in_group desc,channelid desc
    View Code
     
  • 相关阅读:
    4. Validator校验器的五大核心组件,一个都不能少
    如何快速提高数据库查询效率
    linux系统简介
    echo命令
    Linux-->基本查找及vim使用
    jmeter.5.4.1
    Shell文本处理三剑客:grep、sed、awk
    Linux 下的dd命令使用详解
    Linux添加硬盘和挂载两个命令fdisk和mount的使用
    Linux系统常用命令速查手册
  • 原文地址:https://www.cnblogs.com/xcsn/p/4536024.html
Copyright © 2011-2022 走看看