SQL - Stok Farkından Kar Hesaplama
-
selamlar
elimde bir tablo var, bu tabloda her gün için ürünlerin stok adetleri yazıyor.
mesela pazartesi stok 20 ise ve 1 tane satılırsa salı günü stok 19 yazıyor gibi.
yapmak istediğim her gün için önceki günle stok farkını alıp ürün fiyatıyla çarpıp aynı tabloda bir sütuna yazmak
bunu sql de yapmam gerek çünkü söz konusu veri bigquery de ve çok büyük, çekip işleyip geri atmak istemiyorum
denemek için sql fiddle da şema oluşturdum : http://sqlfiddle.com/#!9/14a5000/1
-
Yapıyı tam bilmiyorum lakin , datediff ile beraber fark bulunup bu fark ile kar çarpılıp sonuç alınabilir , ya da bir değişken tanımlanır değişkene fark değeri verilip kar oranı ile çarpılabilir. Zaten tablolar ilişkili olduğu için kar oranını diğer tablodan çekip işlem yapılacak tabloda ki fark değişkeni ile çarpılıp tabloya eklenir. Trigger ile beraber de tetiklenebilir diye düşünüyorum.
Düzenleme : Kar oranı farklı bir tabloda olabilir diye düşündüm , aynı tablo içerisinde de olabilir tabii ki.
-
yolbulucu bunu yazdı
selamlar
elimde bir tablo var, bu tabloda her gün için ürünlerin stok adetleri yazıyor.
mesela pazartesi stok 20 ise ve 1 tane satılırsa salı günü stok 19 yazıyor gibi.
yapmak istediğim her gün için önceki günle stok farkını alıp ürün fiyatıyla çarpıp aynı tabloda bir sütuna yazmak
bunu sql de yapmam gerek çünkü söz konusu veri bigquery de ve çok büyük, çekip işleyip geri atmak istemiyorum
denemek için sql fiddle da şema oluşturdum : http://sqlfiddle.com/#!9/14a5000/1
sql fiddle da oluşturduğun tablo sistemde veriyi alacağın tablo mu yoksa oluşturmak istediğin tablo mu hocam?
-
Yazilimci bunu yazdıyolbulucu bunu yazdı
selamlar
elimde bir tablo var, bu tabloda her gün için ürünlerin stok adetleri yazıyor.
mesela pazartesi stok 20 ise ve 1 tane satılırsa salı günü stok 19 yazıyor gibi.
yapmak istediğim her gün için önceki günle stok farkını alıp ürün fiyatıyla çarpıp aynı tabloda bir sütuna yazmak
bunu sql de yapmam gerek çünkü söz konusu veri bigquery de ve çok büyük, çekip işleyip geri atmak istemiyorum
denemek için sql fiddle da şema oluşturdum : http://sqlfiddle.com/#!9/14a5000/1
sql fiddle da oluşturduğun tablo sistemde veriyi alacağın tablo mu yoksa oluşturmak istediğin tablo mu hocam?
Aynı tabloya yazicam :)
-
yolbulucu bunu yazdıYazilimci bunu yazdıyolbulucu bunu yazdı
selamlar
elimde bir tablo var, bu tabloda her gün için ürünlerin stok adetleri yazıyor.
mesela pazartesi stok 20 ise ve 1 tane satılırsa salı günü stok 19 yazıyor gibi.
yapmak istediğim her gün için önceki günle stok farkını alıp ürün fiyatıyla çarpıp aynı tabloda bir sütuna yazmak
bunu sql de yapmam gerek çünkü söz konusu veri bigquery de ve çok büyük, çekip işleyip geri atmak istemiyorum
denemek için sql fiddle da şema oluşturdum : http://sqlfiddle.com/#!9/14a5000/1
sql fiddle da oluşturduğun tablo sistemde veriyi alacağın tablo mu yoksa oluşturmak istediğin tablo mu hocam?
Aynı tabloya yazicam :)
hocam hızlıca birşey yaptım ilk aklıma geldiği şekilde.
sql fiddle üzerinde schema ya birde bugünü ekledim (Sen sorguda kendine göre ayarlarsın).
CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `sku` VARCHAR(255) NOT NULL , `price` DOUBLE NOT NULL , `stock` INT(11) NOT NULL , `revenue` DOUBLE NULL , `date` DATE NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
INSERT INTO `test` (`id`, `sku`, `price`, `stock`, `revenue`, `date`) VALUES (NULL, 'a1', '10', '20', NULL, '2019-10-14'), (NULL, 'a1', '10', '19', NULL, '2019-10-15'), (NULL, 'a1', '10', '17', NULL, '2019-10-16');Sql koduda
select
a.sku,
((select stock from test b where b.date=(a.date-1) and b.sku=a.sku)-a.stock)*a.price as rakam
from test a where a.date=CURDATE()Bu şekilde çalıştırdığımda istediğin veri geliyor gibi. Mesai başlangıcındayım acil bu kadar oldu :)
sqlfiddle: http://sqlfiddle.com/#!9/f1315a/4/0
-
select T1.* , ((T2.stock-T1.stock) * T1.price) as FARK from test as T1 left join ( select * from test ) as T2 on (T1.id - 1) = ( T2.id )
Bunu dene hocam
-
select a.sku, a.price, a.name, a.stock as stocka, b.stock as stockb, a.date as datea, b.date as dateb,(b.stock - a.stock) as diff, (b.stock - a.stock) * a.price as revenue from stock a join stock b on a.sku = b.sku and b.date = a.date - 1 where (b.stock - a.stock) > 0
sizin yazdiklarinizdan esinlenip şu şekilde çözdüm, teşekkür ederim :)
-
yolbulucu bunu yazdı
select a.sku, a.price, a.name, a.stock as stocka, b.stock as stockb, a.date as datea, b.date as dateb,(b.stock - a.stock) as diff, (b.stock - a.stock) * a.price as revenue from stock a join stock b on a.sku = b.sku and b.date = a.date - 1 where (b.stock - a.stock) > 0
sizin yazdiklarinizdan esinlenip şu şekilde çözdüm, teşekkür ederim :)
Sabah aklima geldi diyecektim ki id ile almak problemli cunku fail oldugunda sirayla gitmiyor. Date ile al diyecektim sen zaten almissin. Kolay gelsin