1.Limit后面跟两个参数时:第一表示跳过的数量,第二表示要取得数量。Limit1,3(取2,3,4) ?Limit后表示要取数量,offset后表示跳过数量。Limit 3 offset 1; 2.窗口函数:记录集合,在满足某种条件记录集合上执行的特殊函数。 ?rank() over()排名,相同的两名并列,下一位空出所占名次:1,2,2,4 ? Dense_rank()over(),相同的两名并列,下一位不空出所占名次:1,2,2,3 ?Row_number()over(),不考虑并列,进行连续排名 ?Eg:Dense_rank()over(order by salary desc nulls last) ?Datediff(dd,rddate,getdate())==0返回以日为单位,和当前getdate相差为0的日期。 连续登陆问题: 1)去重。Select distinct date(logon_time)as time,user_id from 表; 2)登录时间排序。 Select user_id,logon_time,row_number()over(partition by user_id order by logon_time)as sort From ?( ??Select distinct date(logon_time)as time,user_id from 表 ?)temp_0; 3)判断是否连续,使用date_sub()函数 Select ,date_sub(logon_time,interval sort day) as result from ( ?Select user_id,logon_time,row_number()over(partition by user_id order by logon_time)as sort ?From(Select distinct date(logon_time)as time,user_id from 表) temp_0 )temp_1; 4)以user_id,result分组求和 Select user_id,count()from ( ?Select ,date_sub(logon_time,interval sort day) as result from ?( ??Select user_id,logon_time,row_number()over(partition by user_id order by logon_time)as sort ??From( ???Select distinct date(logon_time)as time,user_id from 表 ???) temp_0 ?)temp_1 )temp_2 Group by id,result having count()>=1; 数据库中的三种删除方法以及区别 Delete:删除数据表中的行 Truncate:快速,无日志记录的方法,是用更少的系统资源和事物日志资源,与不含where子句的delete在功能上相同。 Drop:删除数据表、数据库、数据表字段。 事务的ACID特性: ?事务是恢复和并发控制的基本单位 ?原子性:事务所有操作要么全部成功,要么全部失败回滚 ?一致性:事物使数据库从一个一致性状态变换到另一个一致性状态 ?隔离性:不能被其他事务干扰,多个并发事务之间要相互隔离 ?持续性:一个事务一旦提交,对数据的改变是永久性的,不会丢失提交事务的操作事物日志资源. count(星),count(1),count(列)区别: ?Count(*星):包括所有列,相当于行 ?Count(1):忽略所有列,用1代表代码行 ?Count():忽略列值为0,某个字段为null ?列名为主键:count(列)>count(星) ?多个列无主键:count(1)>count(星),两者区别不大 ?只有一个字段:count(*星)最优
|