当前位置: 首页 > news >正文

mysql如何不使用窗口函数,去统计出入库情况

mysql如何不使用窗口函数,去统计出入库情况

你把这个表看做 进出库表,每个物料把时间正序后 依次累加数量 ,看这个物料的时间线上 是否会出现负数,1号进货5个 2号出库3个  3号你不能出库3个 最多俩个 不然就是负库存,说白 就是按时间线累加每天的数据 每个时间线不能出现 负数。需要用mysql 写出来   aa date num A 2024-01-03   2 B 2024-01-05   -2  。要求不能使用窗口函数。    CREATE TABLE your_table (material_code VARCHAR(10),invoice_date DATE,quantity INT
);INSERT INTO your_table (material_code, invoice_date, quantity)
VALUES('A', '2024-01-03', 2),('A', '2024-01-04', 4),('A', '2024-01-05', -2),('A', '2024-01-05', -5),('A', '2024-01-05', 5),('A', '2024-01-06', -9),('A', '2024-01-07', 5),('B', '2024-01-03', 2),('B', '2024-01-04', 4),('B', '2024-01-05', -2),('B', '2024-01-05', -5),('B', '2024-01-05', 5),('B', '2024-01-06', -9),('B', '2024-01-07', 5);

你要通过 MySQL 查询每个物料的库存变化,并检查在时间线上的库存是否会出现负数。在这个场景下,我们需要按照 invoice_date 进行累加库存,累加时一旦发现某一天的库存变为负数,就可以将其标记为库存不足。

这个查询需要以下步骤:

  1. 按照 material_codeinvoice_date 将数据按时间升序排列。
  2. 对于每个物料,逐步累加 quantity,同时判断是否有任何时间点的库存是负数。
  3. 使用 变量 来累加数量并检查是否为负数,而不使用窗口函数。

MySQL 查询:

-- 定义变量
SET @current_stock = 0;
SET @prev_material = '';-- 查询每个物料的时间线库存变化,查看是否出现负数
SELECT material_code, invoice_date, quantity, @current_stock := CASE WHEN @prev_material = material_code THEN @current_stock + quantityELSE quantityEND AS stock_after_transaction,@prev_material := material_code AS material_code_check,CASE WHEN @current_stock < 0 THEN '库存不足'ELSE '库存充足'END AS stock_status
FROM your_table
ORDER BY material_code, invoice_date;

解释:

  1. @current_stock:一个变量,记录每个物料的当前累积库存。
  2. @prev_material:记录前一个物料的 material_code,以确保如果物料切换,库存会重新计算。
  3. 累加逻辑:如果当前物料与上一个相同,累加库存。如果物料变了,重置库存累加。
  4. 库存检查:如果某个时间点的库存小于 0,会标记为 库存不足

执行结果示例:

material_codeinvoice_datequantitystock_after_transactionstock_status
A2024-01-0322库存充足
A2024-01-0446库存充足
A2024-01-05-24库存充足
A2024-01-05-5-1库存不足
A2024-01-0554库存充足
A2024-01-06-9-5库存不足
A2024-01-0750库存充足
B2024-01-0322库存充足
B2024-01-0446库存充足
B2024-01-05-24库存充足
B2024-01-05-5-1库存不足
B2024-01-0554库存充足
B2024-01-06-9-5库存不足
B2024-01-0750库存充足

说明:

  • stock_after_transaction 是每个时间点的库存。
  • stock_status 表明库存是否充足,当库存低于 0 时显示 “库存不足”。

通过这个查询,你可以监控物料的库存变化,并及时发现负库存的情况。

============================================

=============================================================

【第二版:日期聚合】

好的,理解你的意思了。你希望在相同日期的 quantity 先进行聚合,然后再按日期累加库存变化。

我们可以在查询中加入一个聚合步骤,先对相同 material_codeinvoice_datequantity 进行汇总,之后再按照时间顺序进行库存的累加和检查。

更新的 MySQL 查询:

-- 定义变量
SET @current_stock = 0;
SET @prev_material = '';-- 先对相同日期的数量进行聚合,再按日期累加库存并检查是否为负
SELECT material_code, invoice_date, total_quantity, @current_stock := CASE WHEN @prev_material = material_code THEN @current_stock + total_quantityELSE total_quantityEND AS stock_after_transaction,@prev_material := material_code AS material_code_check,CASE WHEN @current_stock < 0 THEN '库存不足'ELSE '库存充足'END AS stock_status
FROM (-- 聚合相同日期的数量SELECT material_code, invoice_date, SUM(quantity) AS total_quantityFROM your_tableGROUP BY material_code, invoice_date
) AS aggregated_table
ORDER BY material_code, invoice_date;

解释:

  1. 内部子查询 aggregated_table

    • 通过 GROUP BY material_code, invoice_date 对相同物料、相同日期的数据进行聚合,使用 SUM(quantity) 来计算每天的总数量。
  2. 外部查询

    • 使用变量 @current_stock 来进行库存累加,逻辑与之前相同。如果物料切换,库存重新计算。
    • 继续检查库存是否为负数,并根据结果显示 “库存不足” 或 “库存充足”。

执行结果示例:

material_codeinvoice_datetotal_quantitystock_after_transactionstock_status
A2024-01-0322库存充足
A2024-01-0446库存充足
A2024-01-05-24库存充足
A2024-01-06-9-5库存不足
A2024-01-0750库存充足
B2024-01-0322库存充足
B2024-01-0446库存充足
B2024-01-05-24库存充足
B2024-01-06-9-5库存不足
B2024-01-0750库存充足

说明:

  • total_quantity 是经过日期聚合后的数量。
  • 之后的逻辑和之前一样,累加库存并检查是否为负。

这样,查询会先对同一天的数量进行汇总,然后再按照日期累加库存,确保你可以监控到任何可能出现负库存的情况。

相关文章:

mysql如何不使用窗口函数,去统计出入库情况

mysql如何不使用窗口函数&#xff0c;去统计出入库情况 你把这个表看做 进出库表&#xff0c;每个物料把时间正序后 依次累加数量 &#xff0c;看这个物料的时间线上 是否会出现负数&#xff0c;1号进货5个 2号出库3个 3号你不能出库3个 最多俩个 不然就是负库存&#xff0c;…...

uni-app canvas文本自动换行

封装 支持单行文本超出换行。多行文本顺位排版 // 填充自动换行的文本function fillFeedText({ctx, text, x, y, maxWidth, lineHeight, color, size}) {// 文本配置ctx.setFontSize(size);ctx.setFillStyle(color);// 计算文本换行宽高&#xff0c;换行逻辑const words text…...

【设计模式-职责链】

定义 职责链模式是一种行为设计模式&#xff0c;**它通过将请求发送给链上的多个处理者来避免请求发送者与处理者之间的紧密耦合。每个处理者可以选择处理请求或将其传递给链中的下一个处理者。**这样&#xff0c;可以将处理请求的责任链式组织&#xff0c;从而实现更灵活的请…...

Prompt:在AI时代,提问比答案更有价值

你好&#xff0c;我是三桥君 随着AI技术的飞速发展&#xff0c;我们进入了一个信息爆炸的时代。在这个时代&#xff0c;只要你会提问&#xff0c;AI就能为你提供满意的答案。这种现象让很多人开始思考&#xff1a;在这个答案触手可及的时代&#xff0c;答案的价值是否还像以前…...

whatis命令:关于命令的简短描述

一、命令简介 ​whatis​ 命令用于查询命令、函数、文件等的基本用途&#xff0c;查询结果只是一句简短的描述。 例如 $ whatis ls ls (1) - list directory contents返回关于 ls 命令的简短描述。这个结果实质是来自于man手册的一个章节&#xff0c;在较新的L…...

ICM20948 DMP代码详解(54)

接前一篇文章:ICM20948 DMP代码详解(53) 上一回解析了inv_icm20948_compass_dmp_cal函数的大部分代码,本回继续讲解inv_icm20948_compass_dmp_cal函数的余下内容。为了便于理解和回顾,再次贴出inv_icm20948_compass_dmp_cal函数代码,在EMD-Core\sources\Invn\Devices\Dri…...

RabbitMQ的应用问题

一、幂等性保障 幂等性是数学和计算机科学中某些运算的性质, 它们可以被多次应⽤, ⽽不会改变初始应⽤的结果 数学上的幂等性&#xff1a; f(x)f(f(x)) |x| 数据库操作幂等性&#xff1a; 数据库的 select 操作. 不同时间两次查询的结果可能不同, 但是这个操作是符合幂等性…...

C++14:通过make_index_sequence实现将tuple转换为array

如何将vector转换为array呢 #include <iostream> #include <tuple> #include <array> using namespace std;template <typename V, typename... Types, size_t... I> constexpr auto do_tuple_to_array(tuple<V, Types...>&& tuple, in…...

Linux中修改MySQL密码

Linux中MySQL的密码操作 1、给用户设置/更新密码 mysqladmin -u用户名 -p原密码 password "新密码"该命令在终端直接执行&#xff0c;不需要进入mysql视图 该命令适用于以下情况&#xff1a; 用户的密码为空&#xff0c;为用户设置密码用户密码需要更新&#xff0c…...

华为OD真题机试-英文输入法(Java)

华为OD机试真题中的“英文输入法”题目主要考察的是字符串处理、单词提取、以及基于前缀的单词联想功能。以下是对该题目的详细解析&#xff1a; 题目描述 主管期望你来实现英文输入法单词联想功能。具体需求如下&#xff1a; 依据用户输入的单词前缀&#xff0c;从已输入的…...

【React 】入门Day01 —— 从基础概念到实战应用

目录 一、React 概述 二、开发环境创建 三、JSX 基础 四、React 的事件绑定 五、React 组件基础使用 六、组件状态管理 - useState 七、组件的基础样式处理 快速入门 – React 中文文档 一、React 概述 React 是什么 由 Meta 公司开发&#xff0c;是用于构建 Web 和原生…...

2024年9月总结及随笔之丢卡

1. 回头看 日更坚持了639天。 读《软件开发安全之道&#xff1a;概率、设计与实施》更新完成读《软件设计的要素》开更并更新完成读《构建可扩展分布式系统&#xff1a;方法与实践》开更并更新完成读《数据湖仓》开更并持续更新 2023年至2024年9月底累计码字1555996字&#…...

sql语法学习 sql各种语法 sql增删改查 数据库各种操作 数据库指令

sql语法学习 sql各种语法 sql增删改查 数据库各种操作 数据库指令 学习SQL语法时&#xff0c;理解其基本结构和用法是关键。下面是SQL语法的详细学习指南&#xff0c;涵盖了SQL的主要部分&#xff0c;包括查询、插入、更新、删除、表操作等。 1. 基本查询语法 SQL 的查询语句…...

鸡兔同笼,但是线性代数

灵感来自&#xff1a;bilibili&#xff0c;巨佬&#xff01; 我们有 14 14 14 个头&#xff0c; 32 32 32 只脚&#xff0c;所有鸡和兔都没有变异&#xff0c;头和脚都完整&#xff0c;没有数错。还有什么 Bug 吗 小学奥数 假设全是鸡&#xff0c;则有 14 2 28 14 \time…...

01---java面试八股文——springboot---10题

01-你是怎么理解Spring Boot 的约定优于配置 约定优于配置是一种软件设计的范式&#xff0c;它的核心思想是减少软件开发人员对于配置项的维护&#xff0c;从而让开发人员更加聚焦在业务逻辑上。Spring Boot 就是约定优于配置这一理念下的产物&#xff0c;它类似于 Spring 框架…...

计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

【进阶OpenCV】 (3)--SIFT特征提取

文章目录 sift特征提取一、基本原理二、特点三、代码实现1. 函数方法2. 检测图像中的关键点3. 绘制关键点4. 计算关键点描述符5. 输出特征坐标点 总结 sift特征提取 SIFT&#xff08;Scale-Invariant Feature Transform&#xff0c;尺度不变特征变换&#xff09;特征检测是一种…...

HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能

关键词&#xff1a;audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景&#xff0c;那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…...

css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用

1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…...

Activiti 工作流大致了解

一、什么是 Activiti 简而言之&#xff0c;就是系统的流程图&#xff0c;如&#xff1a;请假审批流程、账单审批流程等。 二、mysql与pom配置 mysql要使用jdbc:mysql://localhost:3306/activiti?autoReconnecttrue pom文件要添加关键依赖 <!--activiti核心依赖--> &…...

OpenClaw文件自动化实战:Phi-3-mini-128k-instruct实现智能归档

OpenClaw文件自动化实战&#xff1a;Phi-3-mini-128k-instruct实现智能归档 1. 为什么需要智能文件归档 我的桌面和下载文件夹常年处于"灾难现场"状态——各种PDF、Word文档、截图混杂在一起&#xff0c;文件名要么是随机生成的乱码&#xff0c;要么是随手输入的&q…...

Element Plus:Vue 3企业级UI组件库的全方位解析与实践指南

Element Plus&#xff1a;Vue 3企业级UI组件库的全方位解析与实践指南 【免费下载链接】element-plus &#x1f389; A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为基于Vue 3的企业级UI…...

工资条生成器:财务人员的高效办公利器

在企业财务管理工作中&#xff0c;工资条的制作与发放是一项既繁琐又重要的任务。 传统的手工制作方式不仅耗时耗力&#xff0c;还容易出现数据错误和格式不统一的问题。 工资条生成器的出现&#xff0c;为财务人员带来了全新的解决方案。 这款软件专门针对财务工作场景设计…...

前端必懂:开发环境、构建打包的核心差异,新手再也不踩坑

前端必懂&#xff1a;开发环境、构建打包的核心差异&#xff0c;新手再也不踩坑 文章目录前端必懂&#xff1a;开发环境、构建打包的核心差异&#xff0c;新手再也不踩坑一、先一句话打通核心逻辑&#xff08;新手必记&#xff09;二、开发环境&#xff1a;怎么舒服怎么写&…...

告别OBS!用JavaCV+FFmpeg在Windows上搭建个人直播推流服务器(含Nginx配置)

用JavaCVFFmpeg构建Windows直播推流服务器的全栈指南 直播技术正在从专业领域向个人开发者渗透&#xff0c;但传统方案如OBS往往过于笨重且缺乏定制性。本文将带你用JavaCVFFmpegNginx搭建一套轻量级直播推流服务器&#xff0c;实现从视频采集、编码推流到服务端分发的完整链路…...

x86汇编堆栈

x86汇编堆栈 1&#xff09;堆栈操作 x86汇编中的堆栈是一块特殊的内存区域&#xff0c;用于存储程序运行时的数据。它遵循"后进先出LIFO的原则"&#xff0c;主要用于函数调用时的参数传递、局部变量存储以及保存返回地址。 堆栈操作的核心指令是PUSH和POP。PUSH指令将…...

S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配

S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面最近在搞一个小型水厂的恒压供水系统项目&#xff0c;用西门子S7-200 PLC搭配MCGS组态软件&#xff0c;效果挺有意思的。这个系统核心就仨字——稳如狗&#…...

读硕士是否有必要?

一、研究方法说明 数据来源 本报告数据来源于以下公开渠道&#xff08;2024-2025年&#xff09;&#xff0c;所有结论均有真实数据支撑&#xff1a;来源说明麦可思研究院《2025年中国本科生就业报告》权威第三方教育研究机构猎聘《2025人才供需洞察》《2025上半年人才供需洞察报…...

旋转ReDet目标检测环境配置、旋转ReDet目标检测模型代跑训练、旋转ReDet目标检测模型改进创新旋转ReDet目标检测环境配置:Windows、Ubuntu、Centos、Macos等系统

旋转ReDet目标检测环境配置、 旋转ReDet目标检测模型代跑训练、 旋转ReDet目标检测模型改进创新 旋转ReDet目标检测环境配置&#xff1a;Windows、Ubuntu、Centos、Macos等系统环境&#xff0c;如果电脑拥有显卡&#xff0c;可配置GPU版本的ReDet环境。 旋转ReDet目标检测模型代…...

3步精通UndertaleModTool:解锁GameMaker游戏修改全流程

3步精通UndertaleModTool&#xff1a;解锁GameMaker游戏修改全流程 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleModT…...