登录日志表

CREATE TABLE [dbo].[LoginLog]
(
[Seq] [int] NOT NULL IDENTITY(1, 1),  --Seq
[UserId] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL, --用户名
[LoginTime] [datetime] NULL, --登录时间
[SuccessFlg] [bit] NULL, --登录是否成功

) ON [PRIMARY]
GO

需求:返回用户是否能继续登录

登录规则:如果用户1小时内登录三次错误,则锁定1天内无法登录

实现SQL

SELECT CASE WHEN COUNT(1) = 3 THEN 1 ELSE 0 END LockFlg
FROM (
SELECT TOP 3 l.* FROM LoginLog l with(nolock)
INNER JOIN (
SELECT TOP 1 Seq,SuccessFlg,LoginTime,UserId FROM dbo.LoginLog with(nolock)
WHERE UserId='sdf333' AND LoginTime >= DATEADD(DAY,-1,GETDATE())
ORDER BY Seq DESC
) lastLog ON l.Seq <= lastLog.Seq AND l.UserId = lastLog.UserId
WHERE DATEDIFF(HOUR, l.LoginTime,lastLog.LoginTime) < 1
ORDER BY l.Seq desc
) AS t
WHERE t.successflg = 0

公司的一位新人对SQL挺有兴趣的。就让他试试。给到的SQL:

SELECT  COUNT(1) LockFlg FROM
(
SELECT
CASE WHEN COUNT(*)=3 THEN 1 ELSE 0 END AS near3,
CASE WHEN DATEDIFF(HOUR,MIN(t.LoginTime),MAX(t.LoginTime))<1 THEN 1 ELSE 0 END AS inonehour,
CASE WHEN SUM(CAST(t.SuccessFlg AS INT) )=0 THEN 1 ELSE 0 END AS wrongtimes,
CASE WHEN DATEDIFF(HOUR,MAX(t.LoginTime),GETDATE())<24 THEN 1 ELSE 0 END AS inoneday
FROM
(
SELECT TOP 3 * FROM dbo.LoginLog
WHERE UserId='sdf333'
ORDER BY logintime DESC
)t
)tt
WHERE near3=1 AND inonehour=1 AND wrongtimes=1 AND inoneday=1

这位同学的思路更简单直接,感觉我已经老了~~~

工作中遇到的一道SQL应用题的更多相关文章

  1. 收集一些工作中常用的经典SQL语句

    作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...

  2. 工作中遇到的99%SQL优化,这里都能给你解决方案

    前几篇文章介绍了mysql的底层数据结构和mysql优化的神器explain.后台有些朋友说小强只介绍概念,平时使用还是一脸懵,强烈要求小强来一篇实战sql优化,经过周末两天的整理和总结,sql优化实 ...

  3. 工作中常用到的sql命令!!!

    一.mysql数据库日常操作.     1.启动mysql:/etc/init.d/mysql start (前面为mysql的安装路径)     2.重启mysql:  /etc/init.d/my ...

  4. 在工作中常用到的SQL

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在公司做了几张报表,还记得刚开始要做报表的时候都 ...

  5. 工作中遇到的99%SQL优化,这里都能给你解决方案(二)

    -- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL ...

  6. 工作中遇到的99%SQL优化,这里都能给你解决方案(三)

    -- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL ...

  7. 分享一个工作中遇得到的sql(按每天每人统计拖车次数与小修次数)

    查询每人每天的数据 首先先建表 CREATE TABLE `user` ( `name` ) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CR ...

  8. 工作中 sql 整理(一)

    这篇文章记录关于SQL的内容,有些凌乱,是工作中点滴的积累,只能按照时间顺序,逐次记录. 一.update 关联更新 1.需求 Table A   TableB A表中的主键和B表中的主键相关联,关联 ...

  9. 一、SQL应用(工作中遇到的根据表的某列的值不同,采用的不同列关联表)

    一.工作总结: 今天工作中遇到了这样一个需求,具体是根据某张表的某一列值得不同,进行不同关联操作.起初自己的想法是采用UNION操作,把两种情况连接起来,但是会出现一个问题,当进行动态传值SQL拼接的 ...

随机推荐

  1. bootstrap table 的searchParam参数传递

    bootstrap table 的searchParam自定义参数传递 Bootstrap Table返回的数据为value 和 rows Long total代表的是多少条(总数)  List< ...

  2. Vue的基本认识与使用

    什么是Vue? Vue是一个渐进式的js框架,采用的是MVVM模式的双向绑定, Vue的使用 引入vue        <script src="vuejs/vue.js"& ...

  3. KindEditor的使用

    KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本 ...

  4. WiFi安全那些事儿,整理推荐~

    即使你安装了防火墙,不连接任何WIFI和热点,不在任何不受信任的网站下载东西,及时清理缓存和个人敏感信息,你相信吗?你的个人隐私仍然可能被泄露出去! 基础篇: 推荐1  谁出卖了你  << ...

  5. linux下查找命令总结

    查找命令总结,which,whereis,find,locate,type http://blog.csdn.net/jessica1201/article/details/8139249   1.f ...

  6. Chrome控制台打印输出彩色调试信息

    我们都知道Chrome浏览器在控制台可以通过console.log("Hello");输出调试信息.但是每次打印的内容是黑白的难免有些单调,今天偶然的发现某网站居然能够打印彩色调试 ...

  7. 有向图的拓扑排序的理解和简单实现(Java)

    如果图中存在环(回路),那么该图不存在拓扑排序,在这里我们讨论的都是无环的有向图. 什么是拓扑排序 一个例子 对于一部电影的制作过程,我们可以看成是一个项目工程.所有的工程都可以分为若干个" ...

  8. 腾讯云服务器安装宝塔面板快速配置LNMP/LAMP网站系统

    我们在选择购买腾讯云服务器之后,有部分用户肯定是用来建站用途的.毕竟云服务器的性能和功能比虚拟主机优秀很多.腾讯云服务器拥有香港.北京.广州.上海.美国等多个机房,可以安装Linux和Windows系 ...

  9. 【性能测试】:LR中解决接口请求中包含中文字符,服务器不识别的问题

    在LR中,直接写的接口请求,如果请求字段包含中文字段,服务器会不识别,这个时候就要用到lr_convert_string_encoding这个函数: 具体用法: lr_convert_string_e ...

  10. net与树莓派的情缘-安装与卸载MySql(五)

    安装MySql sudo apt-get install mysql-server 删除 mysql sudo apt-get autoremove --purge mysql-server-5.0s ...