SQL Query Advance Зарплатный подсчет с переносом ежемесячного баланса - PullRequest
2 голосов
/ 02 июня 2019

Я отображаю общий баланс с переносом всех месяцев, выбрав месяц, если я выбрал Месяц Март, и следуя

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

, если я выберу месяц февраль, тогда я хочу, чтобы последний остаток каждого идентификатора былвыбран с общей суммой баланса, которая меньше, чем февраль

см. выбранную строку ниже

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
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 ==== 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           149000        
 

любая помощьнаписать sql запрос

1 Ответ

0 голосов
/ 03 июня 2019

Полагаю, вам нужен запрос ниже. Однако я не совсем уверен, как вы решите, какой последний баланс вам нужен из нескольких дат, поскольку ваша дата не имеет отметки времени.

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 
...