【Sql Server】基础之统计库龄语句,仅作为语句使用

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 知识点的综合使用分组、数据转换、Case when then、max、min、count、sum、left join多表关联等知识点


作者:小5聊基础

简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑

编程原则:Write Less Do More

    • 知识点
    编号 知识点 说明
    1 group by 对某个表字段进行分组
    2 convert

    数据类型转换  

    3 case when then else end 逻辑判断
    4 max 最大值
    5 min 最小值
    6 count 记录数
    7 sum 统计值,综合
    8 left join 左链接

    1、知识点

    1)group by

    此处以商品编号进行分组

    select shopid from stock group by shopid

    image.gif

    image.gif编辑2)

    2)convert

    数据类型转换,varchar(10)和120,datetime时间数据类型转为字符串,并只显示10位长度值,刚好就是yyyy-MM-dd

    select convert(varchar(10),timevalue,120) as timevalue from stock

    image.gif

    image.gif编辑

    2、创建表

    USE [test]
    GO
    /****** Object:  Table [dbo].[stock]    Script Date: 04/17/2022 10:52:02 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[stock](
      [typeValue] [varchar](50) NULL,
      [shopid] [int] NULL,
      [timevalue] [datetime] NULL,
      [stockValue] [int] NULL
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO

    image.gif

    3、表添加记录

    模拟一定量的记录进行测试

    --truncate table stock
    /*
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',123,'2020-01-01',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',234,'2020-01-02',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-03',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-04',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-05',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-06',50)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',123,'2020-01-07',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('入库',234,'2020-01-08',100)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',123,'2020-01-09',30)
    insert into stock(typeValue,shopid,timevalue,stockValue)
    values('出库',234,'2020-01-10',30)
    */

    image.gif

    4、查询代码

    /*
    编号123,还存在库存,则使用上次进货时间2020-01-11和2020-02-20相差,就是40天
    编号234,还存在库存,则使用上次进货时间2020-01-11和2020-02-20相差,就是41天'
    */
    declare @searchTime varchar(50)
    set @searchTime='2020-02-20'
    select a.shopid as 商品编号,
    convert(varchar(10),a.inMaxTime,120) as 上次进货时间,
    @searchTime as 搜索时间,
    (case when (a.totalInValue-b.totalOutValue)>0 
    then datediff(day, a.inMaxTime, @searchTime) --还有库存,则用上次进货时间计算
    else datediff(day, b.outMaxTime, @searchTime) end) as 库龄, --没有库存了,使用最后一次出库时间计算
    (a.totalInValue-b.totalOutValue) as '库存',
    (case when (a.totalInValue-b.totalOutValue)>0 then '还有库存' else '已出完' end) as 是否出库完
    from(
        --先按商品编号分组,并筛选入库值和统计入库总值
        --出库最小得时间
        select shopid,
        min(timevalue) as inMinTime, --入库最小时间
        max(timevalue) as inMaxTime, --入库最大时间(上次进货时间)
        sum(stockValue) as totalInValue,
        count(1) as inCount
        from stock 
        where typeValue='入库' and timevalue<=@searchTime
        group by shopid
    ) as a
    left join(
        select shopid,
        min(timevalue) as outMinTime, --出库最小时间
        max(timevalue) as outMaxTime, --出库最大时间
        sum(stockValue) as totalOutValue  --出库总数
        from stock where typeValue='出库' and timevalue<=@searchTime
        group by shopid
    ) as b
    on a.shopid=b.shopid

    image.gif


    相关实践学习
    使用SQL语句管理索引
    本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
    SQL Server on Linux入门教程
    SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
    相关文章
    |
    8天前
    |
    关系型数据库 MySQL 网络安全
    5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
    5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
    |
    3月前
    |
    SQL 存储 监控
    SQL Server的并行实施如何优化?
    【7月更文挑战第23天】SQL Server的并行实施如何优化?
    68 13
    |
    3月前
    |
    SQL
    解锁 SQL Server 2022的时间序列数据功能
    【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
    |
    3月前
    |
    SQL 存储 网络安全
    关系数据库SQLserver 安装 SQL Server
    【7月更文挑战第26天】
    48 6
    |
    2月前
    |
    SQL 存储 关系型数据库
    SQL SERVER 查询所有表 统计每张表的大小
    SQL SERVER 查询所有表 统计每张表的大小
    33 0
    |
    2月前
    |
    SQL 安全 Java
    驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
    驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
    232 0
    |
    3月前
    |
    存储 SQL C++
    对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
    【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
    151 1
    |
    3月前
    |
    SQL Oracle 关系型数据库
    MySQL、SQL Server和Oracle数据库安装部署教程
    数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
    171 3
    |
    3月前
    |
    SQL 存储 安全
    数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
    SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
    |
    3月前
    |
    SQL 监控 数据库
    SQL Server 查询超时问题排查
    【7月更文挑战第8天】排查 SQL Server 查询超时涉及五个主要方面:检查复杂查询、评估服务器性能、审视配置参数、更新统计信息和分析执行计划。关注点包括查询的结构(如连接、子查询和索引),服务器资源(CPU、内存、网络延迟),连接和内存设置,以及统计信息的时效性。通过这些步骤可定位并解决性能瓶颈。
    下一篇
    无影云桌面