一、最近遇到在分页查询里将某些特定的数据靠前展示问题,
解决办法:使用 ROW_NUMBER() OVER函数
该函数是对你 SELECT语句返回的数据进行编号处理,从1开始。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号。
举例,select *, ROW_NUMBER() over(order by 排序字段) as rows from Table,order by 随你跟几个
还有一种方式 row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
它表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
二、UNION用法(UNION 操作符用于合并两个或多个 SELECT 语句的结果集。)
要注意的是:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
select top 1 OSCODE from TB_DICT_ZRZ z ,TB_OS_DICTSYS o
where z.CJZID=o.DICTCODE and o.DICTTYPE='cjz' and CJZNAME='${车站}' and CJZNAME<>'调度中心'
and OSCODE<>'010501'
union
select top 1 OSCODE from TB_DICT_ZRZ z ,TB_OS_DICTSYS o
where z.CJZID=o.DICTCODE and o.DICTTYPE='cjz' and CJZNAME='${车站}' and CJZNAME='调度中心'
and OSCODE='010501' ;
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
增加一个例子
select id,typename,fid from tb_dict_equipment_type order by typecode asc
想在该语句查询出的结果后再加一条 “不选” 的数据,如图:
使用
select id,typename,fid from tb_dict_equipment_type order by typecode asc
UNION
select top 1 id='',typename='不选',fid='' from tb_dict_equipment_type
总报 关键字 'UNION' 附近有语法错误。
查找原因是因为 order by ,改为
select id,typename,fid,typecode from tb_dict_equipment_type
UNION
select top 1 id='00000000-0000-0000-0000-000000000000',typename='不选',fid='00000000-0000-0000-0000-000000000000',typecode='' from tb_dict_equipment_type
order by typecode asc
三、MyBatis Generator 生成的example 如何使用 and or 简单混合查询
四、将查询到的一张表的数据更新到另一张表中
update tb_device d INNER JOIN tb_store s on d.store=s.store set d.storeid=s.storeno
五、MySql计算两个日期的时间差函数
SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01');
interval可是:
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS