Reputation: 35
table:'tank'
Tank_ID Tank
1 Tank 1
2 Tank 2
3 Tank 3
4 Tank 4
5 Tank 5
table:'Tank_Details'
Tank_ID In_Stock Receipt Date
1 1000 1000 2019-07-10
2 2000 2000 2019-07-10
3 3000 3000 2019-07-10
1 300 0 2019-07-10
1 250 0 2019-07-15
3 2500 0 2019-07-15
2 1800 0 2019-07-15
3 2200 0 2019-07-15
1 500 250 2019-07-15
2 2000 200 2019-07-15
3 3000 800 2019-07-15
1 750 250 2019-07-15
4 350 350 2019-07-15
1 700 0 2019-07-20
2 1800 0 2019-07-20
3 2800 0 2019-07-20
4 300 0 2019-07-20
1 1000 300 2019-07-20
2 3000 1200 2019-07-20
3 4200 1400 2019-07-20
4 1200 900 2019-07-20
5 20 20 2019-07-20
1 1500 500 2019-07-20
it showing just opening stock:
select DATE_FORMAT(DATE( s.day), '%d/%m/%Y') as Date, s.`Opening Stock`
from (
select g.day, sum(t.in_stock) `Opening Stock`
from diesel_tank_details t inner join (
select date(date) day, tank_id, min(date) mindate
from diesel_tank_details
where in_stock <> 0
group by date(date), tank_id
) g on g.tank_id = t.tank_id and g.mindate = t.date
group by g.day
) s inner join (SELECT DATE(Date) as "day", sum(Receipt) as "Receipt" FROM `diesel_tank_details` GROUP BY DATE(Date)) r on r.day = s.day and YEAR(r.day) = 2019 AND MONTH(r.day) = 7 GROUP BY DATE(r.day)
i want to show all tank individual 'instock' 1st record of every day.
Desired Output:
Date tank1 tank2 tank3 tank4 tank5 OpeningStock
10/07/2019 1000 2000 3000 0 0 6000
15/07/2019 250 2500 1800 350 0 4900
20/07/2019 700 1800 2800 300 20 5620
Upvotes: 1
Views: 66
Reputation: 3833
Try this:-
with cte as (
select row_number() over (partition by tank.tank_id order by date) as Slno, Tank.Tank_id, tank.Tank, TD.In_stock, Td. Receipt, Td.Date
from Tank inner join Tank_details as TD on tank.Tank_Id=td.tank_Id
)
select date, [tank1], [tank2], [tank3], [tank4], [tank5], ([tank1] + [tank2] + [tank3] + [tank4] + [tank5]) as OpeningBalance from
(select tank, date, In_stock from cte where Slno = 1 )
as d
pivot
( max(in_stock) for tank in ( [tank1], [tank2], [tank3], [tank4], [tank5] )
) as Pv
You need to create pivot for your date only. Then make sum of your balance value for respected dates.
Upvotes: 1