0 0

怎样只用一条Select语句实现该规则下的排序?5

我现在要写一条查询的SQL语句,试了很长时间还是没写出来,现求各位帮忙了~

 

假设有如下表格t_context,其中type共有A、B、C种类型,优先级依次为B>A>C,现在要查询该表格中的所有数据,不过须按如下规则排序:

1、类型为B的排在第一,若有多条则按时间递减;

2、类型为A的排在第二,若有多条则按时间递减;

3、剩下的则按时间递减即可。

 

 

id type date context
1 C xxxx-xx-xx xx:xx:xx ...
2 C xxxx-xx-xx xx:xx:xx ...
3 A xxxx-xx-xx xx:xx:xx ...
4 C xxxx-xx-xx xx:xx:xx ...
5 B xxxx-xx-xx xx:xx:xx ...
6

A

xxxx-xx-xx xx:xx:xx ...

 

 

 

 

 

 

 

 

 

 

 

怎样用一条select语句实现这种规则的排序结果?

2012年10月23日 15:59

3个答案 按时间排序 按投票排序

1 0

采纳的答案

mysql实现:

select id,type,date,context from (
	select id,
	(case type when 'A' then 2 when 'B' then 3 else 1 end) level,
	type,
	date,
	context
	 from t_context 
) t
order by t.level desc,t.date desc;


oracle的话,可以把case部分用decode代替

2012年10月23日 16:26
0 0

如果优先级大小无法调整,可以用case when 或者union

2012年11月01日 02:15
0 0

其实主要还是你们设计有问题,如果优先级这样设计:
优先级依次为A>B>C这样在效率上要高很多

2012年11月01日 02:13

相关推荐

    MySQL中select语句使用order按行排序

    再来回顾一下SQL语句中的select语句的语法: Select 语句的基本语法: Select <列的集合> from <表名> where <条件> order by <排序字段和方式> 如果要对查询结果按某个字段排序,则要使用order by 子句...

    经典SQL语句大全

    13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...

    MySQL数据库:排序.pptx

    在一条SELECT语句中,如果不使用ORDER BY子句,结果中行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。 语法格式: ORDER BY {列名 | 表达式 | 列编号} [ASC | DESC] , ... 说明:ORDER...

    sql经典语句一部分

    13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...

    数据库操作语句大全(sql)

    13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...

    经典全面的SQL语句大全

     13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段  14、说明:...

    精通sql结构化查询语句

    SQL查询篇第6章 简单的SELECT语句查询 6.1 查询的基本结构 6.1.1 了解SELECT语句 6.1.2 SELECT语句的语法格式 6.1.3 SELECT语句的执行步骤 6.2 简单的查询语句 6.2.1 查询表中指定的字段 6.2.2 查询所有的字段 6.2.3...

    超实用sql语句

    13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...

    T-SQL高级查询

    compute进行汇总前面是查询的结果,后面一条结果集就是汇总的信息。compute子句中可以添加多个汇总表达式,可以添加的信息如下: a、 可选by关键字。它是每一列计算指定的行聚合 b、 行聚合函数名称。包括sum、...

    Mysql查询最近一条记录的sql语句(优化篇)

    下策——查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc limit 1 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表...

    SQL基本语句

    #删除某一条记录(行)  delete from 表名 [where 条件] [order by 列名] [Limit 删除的行数rowNum];  删除满足条件的按列名排序后的所有记录的第rowNum行 #排序  select 列名 from 表名 order by 列名 ...

    SQL Server数据库实验_数据查询与更新_简单的单表查询.doc

    熟练掌握用SELECT语句实现简单的单表查询。掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。 二、实验原理 用SELECT语句实现简单的单表查询。在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目...

    MySQL笔试题一条语句解决问题多表联查聚合查询

    中等难度笔试题,包括select / insert / update / delete 语法应用 多表联合查询,排序、分组等功能运用 包括但不限于MySQL,也可推广至Oracle、DB2等常见关系型数据库 考验的包括基本的CRUD水平,以及边界情况的...

    SQL语法大全

    Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 ActiveConnection Recordset对象可以通过...

    sql多条件多字段排序(图文教程)

    语句: 代码如下:select * from [User] order by [Password] desc,Id asc在一个条件重复的情况下,使用第二个条件排序如下:  注意这里的第 14,15条记录(在Password相同的情况下,根据Id排序)语句: 代码如下:...

    MYSQL常用命令大全

    MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    SQL语句大全.docx

    20.Count 查询有多少条数据 21.Max 查询某一列最大值 22.Min 查询某一列最小值 23.Avg 查询某一列的平均值 24.Sum 查询某一列的总和 25.分组查询 group by 列 26.分组条件查询 having 查询平均年龄大于...

    数据库内测版.doc

    9.关于查询语句的SELECT子句为SELECT A,B,C *D,则不能使用的GROUP BY子句是(GROUP BY A) 10.建立索引的优点之一是(保证数据的唯一性、加快数据检索速度、加速表与表之间的连接、减少查询中分组和排序的时间、提高...

    SQL实现相邻两行数据的加减乘除操作

    SQL实现表里数据按一定顺序排序后,按某几个字段分组后相邻两行数据实现加减乘除运算。 思路: 1:先把表数据分组排序后打上序号标签 2:根据需求把标签字段加/减一 上代码: select distinct a.phone,from_unix...

    数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    MySQL随机查询出一条记录: 代码如下: — 下面的查询语句效率高,不要使用 SELECT * FROM table1 ORDER BY rand() LIMIT 1 来查询 SELECT * FROM table1 WHERE id=(SELECT id FROM table1 ORDER BY rand() LIMIT 1)...

Global site tag (gtag.js) - Google Analytics