SQL高级语法
1.数据抽稀
数据抽稀的思想,就是如果我要查一定时间内的数据,绘制一条曲线,但是由于数据量太多,但是数量变化又不大的情况下,如果能通过抽稀的方式进行数据过滤,那就再好不过了。就像参考文章中说的一样。
1.数据库查询,怎样按一定时间间隔跳跃查询数据? (问题和我的一样)
2.Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介 (从上面参考文章中得到的一个Rank函数)
3.postgis抽稀 (这是使用postgis自带的函数进行图形抽稀的方式)
4.sql 依据时间间隔分组,获取第一条数据
2.时间函数
1 | -- 时间相加 |
1.SQL Server DATEADD() Function
2.Date and Time Conversions Using SQL Server (这篇文章中包括了很多的转换方式,主要介绍了convert函数的用法,最后一个参数不同,转换的效果也不同)
3.分组取第一条
1 | -- 按carRecordId,checkType进行分组,然后编号,取编号为1的那一个,partition by后面为分组条件,可以多个分组条件 |
4.创建时间和自动更新时间
在Dbeaver中,执行下面的语句
1 | --- SQL Server 创建时间 --- |
1.SQL | 创建时间,更新时间,使用默认值自动设置 (这篇文章非常的有用)
2.怎么在sql server建表时设置时间字段自动生成值 (因为我使用的数据库管理工具是Dbeaver,所以没有相应的设置项)
3.SQL Server自动更新datetimestamp字段 (这里用了触发器实现的自动更新字段)
4.GETDATE (Transact-SQL) (微软官方的GETDATE说明)
5.利用SqlServer触发器自动更新表updatetime字段值 (mysql有自动更新字段,但是sql server没有,可以借助于触发器实现)
5.批量更新
[需求]
比如现在我们要把超市表内的每件商品价格都提高11%,是否有必要为每一行都写一条独立的UPDATE语句呢?就现在的情况而言,也许不会有很多的UPDATE语句要写,但如果是更大的表,这就成问题了。所以回答是否定的。你所要做的只是写一条不指定要更新的行的UPDATE语句
1 | update shop set priceprice = price * .11 ; |
[问题]
数据库文件8个G左右,执行批量更新后,出现了问题:
1.出现日志文件过大,导致报错。
2.执行后出现了数据库文件变得异常的大,最后全部占满磁盘大40多个G,最后失败。
这个语句要慎用,慎用,慎用,等我发现过来的时候,感觉已经晚了。
SQL 错误 [9002] [S0004]: 数据库 ‘PhEMS合力PVC’ 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
1.sql语句之批量更新
2.SQLServer批量更新
3.SQL Server UPDATE语句用于更新数据
4.SQL Server中收缩、清空和删除数据库文件及日志文件
5.sql语句把某一列的所有值前面加一个前缀
6.索引
1 | --创建索引 |
1.SQL Server 创建索引(index) 索引分为聚集索引和非聚集索引,避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。在频繁进行排序或分组(即进行 GROUP BY 或 ORDER BY 操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。在选择索引键时,尽可能采用小数据类型的列作为键以使每个索引页能容纳尽可能多的索引键和指针,通过这种方式,可使一个查询必需遍历的索引页面降低到最小,此外,尽可能的使用整数做为键值,因为整数的访问速度最快。
7.取最近一条数据
需求主要就是一系列时间序列的数据,每五秒钟存一条记录,现在需要给定一个时间点,比如 00:00:00 这个时间点,离这个点前或者后面最近的一条数据。
1.sql 取一条离当前时间最近的记录