SQL查询预支薪金盘点,结转月结余

Posted

技术标签:

【中文标题】SQL查询预支薪金盘点,结转月结余【英文标题】:SQL Query Advance Salary counting with carry forward of monthly balance 【发布时间】:2019-10-18 08:39:47 【问题描述】:

我通过选择月份来显示所有月份结转的总余额 如果我选择了 3 月和以下月份

emp_id ==== bal_amt ==== Advance_sal ==== 日期 ==== basic_salary -------------------------------------------------- --------------- 1 48000 2000 2019-01-10 50000 1 46000 2000 2019-01-11 50000 2 78000 2000 2019-01-11 80000 2 75000 3000 2019-01-11 80000 1 49000 1000 2019-02-10 50000 2 74000 6000 2019-02-11 80000

如果我选择 2 月,那么我希望选择每个 ID 的最后余额金额,其中总余额少于 2 月

请查看下方选定的行

emp_id ==== bal_amt ==== Advance_sal ==== 日期 ==== basic_salary -------------------------------------------------- --------------- 1 48000 2000 2019-01-10 50000 1 46000 2000 2019-01-11 50000 -- 选择 2 78000 2000 2019-01-11 80000 2 75000 3000 2019-01-11 80000 -- 选择 1 49000 1000 2019-02-10 50000 -- 选择 2 74000 6000 2019-02-11 80000 -- 选择
SELECT *
FROM advance_sal x JOIN
  (SELECT empp_id, max(id)
   FROM advance_sal
   WHERE empp_id = 1
     AND MONTH(`ad_date`)<="2"
     AND YEAR(`ad_date`)<="2019" group_by empp_id) y ON y.empp_id = x.empp_id
AND y.id = x.id
ORDER BY x.id

所以总的结果是

emp_id ==== bal_amt ==== Advance_sal ==== 日期 ==== basic_salary -------------------------------------------------- -------------- 1 46000 2000 2019-01-11 50000 2 75000 3000 2019-01-11 80000 1 49000 1000 2019-02-10 50000 2 74000 6000 2019-02-11 80000 emp_id ==== total_bal_amount 少于二月 -------------------------------------------------- -------------- 1 95000 2 149000

任何帮助编写 sql 查询

【问题讨论】:

您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称(而且您的查询是无效的标准 SQL)。请为您正在使用的数据库产品添加tag 抱歉回复晚了。请您详细说明您的问题,我实际上没有得到我是新手。 【参考方案1】:

我猜您需要以下查询。我不确定您如何从多个相同的日期确定您需要的最后一个余额,因为您的日期没有时间戳

SELECT *, SUM(bal_amt) over(partition by emp_id) fROM (
SELECT emp_id, bal_amt, advance_sal, date, basic_salary, RN = Row_number() over(partition by emp_id order by date desc)
FROM advance_sal where  
     MONTH(`ad_date`)<="2"
     AND YEAR(`ad_date`)<="2019" ) a where RN = 1 

【讨论】:

抱歉回复晚了。此查询在手动检查分区附近时出错,您能告诉我准确的查询以获取数据吗 我不熟悉分区查询我的 mysql 版本是 5.6.36 我认为它不能在这个版本中运行

以上是关于SQL查询预支薪金盘点,结转月结余的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句 在所有部门中查询薪金最高或最低的雇员的信息

当不存在当前日期值时,SQL Server 查询以结转前一天的值

Oracle SQL:经典查询练手第一篇

SQL Server 2012 - 使用积压和结转运行总计

#yyds干货盘点#SQL 子查询

018.查询练习50题(sql实例)