对hire_date字段排序降序,此时最晚的时间排在第一个,再用LIMIT取出。...SELECT * FROM employees ORDER BY hire_date DESC LIMIT 0,1; LIMIT m,n : 表示从第m+1条开始,取n条数据; LIMIT n : 表示从第...0条开始,取n条数据,是limit(0,n)的缩写。...本题limit 0,1 表示从第(0+1)条数据开始,取一条数据,即取出最晚入职员工。...方法二: 子查询 先找出 hire_date 字段的最大值,再把该值当成 employees 表的 hire_date 查询条件。
由于需求的复杂,本文还是选择使用关系型数据库实现和存储,因为关系型数据库查询无所不能,哈哈哈哈 功能要求 签到 补签 统计某用户截至今天连续打卡天数 统计某用户在某一天打卡排名 统计某用户截至到某天连续打卡天数...SELECT 查询小于当前签到日期(markDayTime)最近一条签到记录数据,如果不存在,day_continue 字段为 -1,如果存在打卡记录,则day_continue 字段为 markDayTime...mark_day_time < #{markDayTime} ORDER BY mark_day_time DESC LIMIT 1) t 补签和普通打卡在代码上有不一致,因为需要更新大于补签日期最旧一条数据的...= 1) { return null; } // 更新大于markDayTime的第一条记录dayContinue字段值 MarkRecord nearestBeforeRecord...连续打卡天数:当天没打卡,前一天打卡,也算连续打卡;如果前一天没有打卡,那就断签了, 总打卡数:统计用户所有打卡记录数量 SQL 参数说明:#{yesterdayTime}为昨天的日期,#{markDayTime
所有语句都是基于mysql的语法,能用一条sql语句搞定的就不要去写程序。...自动设置记录的创建和更新时间 为每一条记录添加create_time和update_time是非常明智的选择,分别表示当前记录第一次添加和最后一次更改的时间戳。...SELECT CONVERT_TZ(x, "+00:00", "+8:00") AS bj_x FROM t 其中字段x是utc的时间,用convert_tz 函数可以转成北京时间。...当前时间 有时候需要获取最近3天的创建的数据,那么我们就需要对日期做一个对比,可以借助CURRENT_DATE()来完成。...下面这个sql可以用来获取当天的数据,需要用DATE()函数来获取时间字段的日期值。
❑ 对所有行执行计算,指定 ALL 参数或不指定参数(因为 ALL 是默认行为)。 ❑ 只包含不同的值,指定 DISTINCT 参数。...和DATE_ADD 一个是加上日期, 一个是减去日期 DATEDIFF() 函数返回两个日期之间的天数。...%u 周(00-53)星期一是一周的第一天 %V 周(01-53)星期日是一周的第一天,与 %X 使用 %v 周(01-53)星期一是一周的第一天,与 %x 使用 %W 星期名 %w 周的天...(0=星期日, 6=星期六) %X 年,其中的星期日是周的第一天,4 位,与 %V 使用 %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y 年,4 位 %y 年,2 位 防止 SQL...游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
该字段存取表达用于选择从记录中的值或将投射一个记录或表一个具有更少的字段或列,分别。...它使用运算符x[y]按字段名称在记录中查找字段。如果该字段y在 中不存在x,则会引发错误。该表单x[y]?用于执行可选字段选择,null如果请求的字段在记录中不存在,则返回。...// null 运营商支持对多个字段的集体访问,用于必需的记录投影和可选的记录投影。操作员x[[y1],[y2],...]将记录投影到具有较少字段的新记录(由y1、y2、选择...)。...以后对字段的任何访问y都会引发相同的错误。 该表达式x产生一个记录或表值,或引发错误。...一条记录的每个字段名称也存在于另一条记录中。 一条记录的每个字段的值等于另一条记录中同名字段的值。 例如:
FROM table_name WHERE condition1 AND condition2 AND condition3 ...; 如果第一个条件与第二个条件都为TRUE,则AND运算符显示一条记录...FROM table_name WHERE condition1 OR condition2 OR condition3 ...; 如果第一个条件与第二个条件任何一个条件为TRUE,则OR运算符显示一条记录...的区别:where是分组之前的过滤,不满足where条件则不参与分组,having是分组之后对结果进行过滤,having可以使用聚合函数,where不可以 5、排序查询 SELECT column1,...ASC|DESC; 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 6、分页查询 (1)select 字段列表 from 表名 limit 起始索引,查询记录数; 第一页数据,起始索引可省略...、多表查询 多表查询 (1)INNER JOIN:选择两个表中具有匹配值的记录 (2)SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1
,subjectNo,examDate); DMl语句操作数据 插入数据记录 概念 语法 插入单行数据 插入一条需要存储在数据库的数据记录 INSERT INTO 表名 (字段1,字段2)value...新表 from 原表 修改数据记录 概念 语法 修改数据记录 当我们要对某一条数据修改或者更新时我们要用到 UPDATE 表名 SET 字段1= '修改内容 WHERE 条件 删除表 概念 语法...(SQL)返回:sql upper(str) 将str所有的字符串改为大写 sql upper(sql)返回:SQL SUBSTRING(STR,NUM,LEN) 返回字符串str的第num个位置开始长度为...) 返回d1和d2之间的相隔天数 SELECT DATEDIFF(NOW(),‘2008-8-8’);返回值:4592 adddate(date,n) 计算日期参数date加上n天之后的时间 SELECT...=,,>=之后,它不允许子查询返回多条记录,如果有多条满足条件的记录返回,会出现执行代码错误。
ROUND(x,y) 求参数x的四舍五入的值,保留y位小数 日期函数 函数 功能 CURDATE() 返回当前日期 CURTIME() 返回当前时间 NOW() 返回当前日期和时间 YEAR(date...描述 关键字 非空约束 限制该字段的数据不能为NULL NOT NULL 唯一约束 保证该字段的所有数据均为唯一 UNIQUE 主键约束 主键是一行数据的唯一标识,要求非空且唯一 PRIMARY KEY...默认约束 保存数据时,若未指定该字段的值,则采用默认值 DEFAULT 检查约束 保证字段值满足某一条件 CHECK 外键约束 让两张表建立连接,保证数据的一致性和完整性 FOREIGN KEY 注意...,即这些操作要么同时成功,要么同时失败 注意: 默认MYSQL的事务是自动提交的,也就是说每执行一条DML语句,MYSQL就会立即隐式的提交事务 事务操作 事务操作分为几个部分: 查看事务提交方法 --...持久性(Durability):事务一旦提交或滚回,它对数据库的改变就是永久的 并发事务问题 并发事务常常出现三种问题: 问题 描述 脏读 一个事务读到另外一个事务还没有提交的数据 不可重复读 一个事务先后读取同一条记录
代码完成) 1、找出一天内有多次更新的商品ID 2、对于一天内有多次更新的商品,只保留当天最后一条记录,去掉其他记录 3、分析商品的最后更新时间分布,看能否得出有价值结论 Part. 2 SQL方法:...因为2,3题需要计算当天的指标,所以我们日期格式化的时候要加上以天为单位的日期。...BY 修改量 desc 一天内更新多次的记录也就是数据是>1 或者是>=2 两种写法都可以,顺序是先按照每天日期分组,再按照item_id,也就是商品分组。...猜测对于店铺人员不多,那么初步推测店铺人员在上班的过程当中是充当客服的角色,所以白天上班是没有机会和时间去更新商品内容的,所以选择夜晚修改宝贝。...用rank方法可以实现SQL的 窗口函数,对day和itemid分组,在进行insert_time排序,然后row_number<2 也就是等于1的保留,因为这条数据是当天最新数据。 第三题: ?
在MySQL中,默认AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的值,这样新插入的记录的自增字段值从初始值开始递增,如在表中插入第一条记录,同时指定id值为5,则以后插入的记录的id...二十二、游标 什么是游标 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录...,或者是 随意定位到某一条记录,或者逐条处理数据 ,并对记录的数据进行处理。...窗口函数的作用类似于在查询中对数据进行分组,不同的是,分组操作会把分组的结果聚合成一条记录,而窗口函数是将结果置于每一条数据记录中。
一个订单完整的生命周期由五行数据描述:下订单时生成一条销售订单记录;订单商品被分配到相应库房时,新增一条记录,存储分配时间和分配数量;产品打包时新增一条记录,存储打包时间和数量;类似的,订单配送和客户收货时也都分别新增一条记录...它描述了status_date列对应的状态值,例如,如果一条记录的状态为N,则status_date列是下订单的日期,如果状态是R,status_date列是收货日期。...每种状态都会有一条订单记录,这些记录具有相同的订单号,因此订单号不能再作为事务表的主键,需要删除order_number字段上的自增属性与主键约束。...此时的结果应该只是增加了一条新产品记录,原有数据没有变化。 无事实事实表是没有任何度量的事实表,它本质上是一组维度的交集。...为了确定事实表中的一条销售订单记录是否是迟到的,需要把源数据中的登记日期列装载进销售订单事实表。为此在要销售订单事实表上添加登记日期代理键列。
1.4 主键 主键是一列或多列的组合,用于标识表中唯一的一条记录。所以,它天然的一个属性就是不重复性,也不允许为NULL值。...1对1,是指表A和表B通过某字段关联后,表A中的一条记录最多对应表B中的一条记录,表B中的一条记录也最多对应表A中的一条记录。...1对多,是指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录最多对应表A中的一条记录。...多对多,是指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录可能对应表A中的多条记录。 1对1 和 1对多关系,通常使用外键引用对应表的主键就可以表达。...SQL用关键字、表名、列名、操作符等组合而成的一条语句,用来描述操作的内容。SQL是有国际标准的,因此其通用性不言而喻。 2.1 关键字 SQL有很多关键字,每个关键字的含义和用法都不相同。
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键),FOREIGN KEY 约束用于预防破坏表之间连接的行为,也能防止非法数据插入外键列因为它必须是它指向的那个表中的值之一...(即外键表约束主键表) SET NULL:则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(一样是外键表约束主键表,不过这就要求该外键允许取null) 5...---- 0x01 SQL 基础函数 描述:SQL 拥有很多可用于计数和计算的内建函数,可以帮助我们更方便的存储以及获取数据; Date 函数 描述:在处理日期的时候我们需要确保所插入的日期的格式,与数据库中日期列的格式相匹配...%V 周(01-53)星期日是一周的第一天,与 %X 使用 %v 周(01-53)星期一是一周的第一天,与 %x 使用 %W 星期名 %w 周的天(0=星期日, 6=星期六) %X 年,其中的星期日是周的第一天...,4 位,与 %V 使用 %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y 年,4 位 %y 年,2 位 SQL Server Date 函数 函数 描述 GETDATE() 返回当前的日期和时间
image.png 其中表内各字段含义如下 用户名:表示用户在该短视频平台注册的唯一用户名。 操作记录:表示用户在该短视频平台点击的按钮名称。...现在运营人员找到作为数据分析师的你,想让你帮忙看看用SQL取两个数据,具体如下: 1.分析每天的访客数和他们的平均操作次数 2.统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻。...按日期分组(group by日期),汇总(人数用count用户名,操作数用count操作时间)。这里因为表中代表日期的字段“操作时间”是精确到分秒的,所以需要利用date函数将操作时间转为日期形式。...2.统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻 其实这个是在日常工作中业务经常要用到的SQL取数场景。...从而可以写出第一条SQL语句: image.png 填空完成后,再在外边嵌套条件: image.png 最终SQL如下: image.png 查询结果: image.png 【举一反三】
0x01 什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。...拉链表的使用场景 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计: 有一些表的数据量很大,比如一张用户表,大约 10 亿条记录,50 个字段,这种表,即使使用 Orc 压缩,单张表的存储也会超过...现在我们假设我们已经已经初始化了 2017-01-01 的日期,然后需要更新 2017-01-02 那一天的数据,我们有了下面的 Sql。 然后把两个日期设置为变量就可以了。...拉链表和流水表 流水表存放的是一个用户的变更记录,比如在一张流水表中,一天的数据中,会存放一个用户的每条修改记录,但是在拉链表中只有一条记录。 这是拉链表设计时需要注意的一个粒度问题。...淘汰机制 关于淘汰机制,其实和性能也是有关系的,一方面是因为所有数据的积累会导致计算越来越慢,另一方面是业务侧其实对历史数据的需求也有一定的优先级的。
0x01 什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。...拉链表的使用场景 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计: 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G...005资料进行了修改,006是新增用户: 如果在数据仓库中设计成历史拉链表保存该表,则会有下面这样一张表,这是最新一天(即2017-01-03)的数据: 说明 t_start_date表示该条记录的生命周期开始时间...现在我们假设我们已经已经初始化了2017-01-01的日期,然后需要更新2017-01-02那一天的数据,我们有了下面的Sql。 然后把两个日期设置为变量就可以了。...拉链表和流水表 流水表存放的是一个用户的变更记录,比如在一张流水表中,一天的数据中,会存放一个用户的每条修改记录,但是在拉链表中只有一条记录。 这是拉链表设计时需要注意的一个粒度问题。
0x01 什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。...拉链表的使用场景 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计: 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G...资料进行了修改,006是新增用户: 如果在数据仓库中设计成历史拉链表保存该表,则会有下面这样一张表,这是最新一天(即2017-01-03)的数据: 说明 t_start_date表示该条记录的生命周期开始时间...现在我们假设我们已经已经初始化了2017-01-01的日期,然后需要更新2017-01-02那一天的数据,我们有了下面的Sql。 然后把两个日期设置为变量就可以了。...拉链表和流水表 流水表存放的是一个用户的变更记录,比如在一张流水表中,一天的数据中,会存放一个用户的每条修改记录,但是在拉链表中只有一条记录。 这是拉链表设计时需要注意的一个粒度问题。
0x01 什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。...拉链表的使用场景 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计: 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G...现在我们假设我们已经已经初始化了2017-01-01的日期,然后需要更新2017-01-02那一天的数据,我们有了下面的Sql。 然后把两个日期设置为变量就可以了。...拉链表和流水表 流水表存放的是一个用户的变更记录,比如在一张流水表中,一天的数据中,会存放一个用户的每条修改记录,但是在拉链表中只有一条记录。 这是拉链表设计时需要注意的一个粒度问题。...在拉链表的设计中可以加一些内容,因为我们每天保存一个状态,如果我们在这个状态里面加一个字段,比如如当天修改次数,那么拉链表的作用就会更大。
(确定记录)的字段来共同连接两张表 Id(P) 婚姻 籍贯 住址 联系人 2 1 一个常用表中的一条记录: 永远只能在一张不常用表中匹配一条记录;反过来,一个不常用表中的一条记录在常用表中也只能匹配一条记录...解决方案: 在某一张表中增加一个字段,能够找到另外一张表的中记录: 应该在孩子表中增加一个字段指向妈妈表: 因为孩子表的记录只能匹配到一条妈妈表的记录....,因为你在连接的时候左表记录全部保留,在右表中没有员工与OPERATIONS部门匹配,连接的是NULL,这也是一条记录,所以这里才会出现1。...Old代表的是旧记录,new代表的是新记录 删除的时候是没有new的; 插入的时候是没有old Old和new都是代表记录本身: 任何一条记录除了有数据, 还有字段名字....使用方式: old.字段名 / new.字段名(new代表的是假设发生之后的结果) 查看触发器的效果 如果触发器内部只有一条要执行的SQL指令, 可以省略大括号(begin和end) Create
注意:默认MySQL的事务是自动提交的,也就是说 当执行一条DML语句 MySQL会立即隐式地提交事务。...不可重复读(non-repeatable read)一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。...紧接着,事务B插入了一条余额大于0的记录行(富有程度默认为贫穷),并且在事务A提交之前先提交了,SQL如下:INSERT INTO `bank_balance` (`id`, `user_name`,...事务A修改一条数据的值,还未提交,事务B就读到了A修改的值;结果A回滚了,事务B之前读的就是一个过期值,即事务读到了修改之后没有提交的值不可重复读(non-repeatable read):指的是在一个事务内多次读取同一条数据...串行化(SERIALIZABLE),每个读写操作都会加锁,多个事务要访问同一条记录时,必须要进行排队,优先级低的事务必须等优先级高的事务完成以后才能进行。
领取专属 10元无门槛券
手把手带您无忧上云