SQL查询带月结转的预支工资盘点
我通过选择月份显示所有月份结转的总余额 如果我选择了三月份及以下月份 emp_id ==== bal_amt ==== advance_sal ==== date ==== 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 ==== date ==== basic_salary ----------------------------------------------------------------- 1 48000 2000 2019-01-10 50000 1 46000 2000 2019-01-11 50000 -- select 2 78000 2000 2019-01-11 80000 2 75000 3000 2019-01-11 80000 -- select 1 49000 1000 2019-02-10 50000 -- select 2 74000 6000 2019-02-11 80000 -- select 所以总的结果是 emp_id ==== bal_amt ==== advance_sal ==== date ==== 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 less than February ---------------------------------------------------------------- 1 95000 2 149000SQL查询带月结转的预支工资盘点,sql,greatest-n-per-group,Sql,Greatest N Per Group,我通过选择月份显示所有月份结转的总余额 如果我选择了三月份及以下月份 emp_id ==== bal_amt ==== advance_sal ==== date ==== basic_salary ----------------------------------------------------------------- 1 48000 2000 2019-01-10 50000 1 46000
任何关于编写sql查询的帮助我猜您需要以下查询。我不确定你是如何决定你需要的多个相同日期的最后余额的,因为你的日期没有时间戳
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
你用的是什么产品?SQL只是一种查询语言,不是特定数据库产品的名称,您的查询是无效的标准SQL。请为您正在使用的数据库产品添加一个。很抱歉,答复太晚。请你详细说明你的问题,我其实没有得到我是新手。抱歉,迟了答复。此查询在分区附近手动检查时出错。请告诉我获取数据的确切查询。我不熟悉分区查询。我的MYSQL版本是5.6.36。我想它在此版本中不运行
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