回答編集履歴
2
調整
answer
CHANGED
@@ -29,21 +29,20 @@
|
|
29
29
|
select id,name
|
30
30
|
,-sum(stock*(d=(@d:='2017-03-07')- interval 1 day))+sum(stock*(d=@d)) as diff_stock
|
31
31
|
,-sum(price*(d=@d- interval 1 day))+sum(price*(d=@d)) as diff_price
|
32
|
+
,case when sum(d=(@d-interval 1 day))=0 then '追加' when sum(d=@d)=0 then '削除' else '' end as status
|
32
33
|
from ganpura where d between @d- interval 1 day and @d
|
33
34
|
group by id
|
34
35
|
having diff_stock<>0 or diff_price<>0;
|
35
36
|
```
|
36
|
-
|id|name|diff_stock|diff_price|
|
37
|
+
|id|name|diff_stock|diff_price|status|
|
37
|
-
|:--|:--|--:|--:|
|
38
|
+
|:--|:--|--:|--:|:--|
|
38
|
-
|MS-06|ザク|-3|0|
|
39
|
+
|MS-06|ザク|-3|0||
|
39
|
-
|MSM-04|アッガイ|3|2000|
|
40
|
+
|MSM-04|アッガイ|3|2000|追加|
|
40
41
|
|
41
42
|
@d:='2017-03-07'の箇所を'2017-03-08'変更すれば
|
42
|
-
|id|name|diff_stock|diff_price|
|
43
|
+
|id|name|diff_stock|diff_price|status|
|
43
|
-
|:--|:--|--:|--:|
|
44
|
+
|:--|:--|--:|--:|:--|
|
44
|
-
|MS-06|ザク|0|-2000|
|
45
|
+
|MS-06|ザク|0|-2000|削除|
|
45
|
-
|MS-09|ドム|0|-500|
|
46
|
+
|MS-09|ドム|0|-500||
|
46
|
-
※ただしこれだとザクは削除されたけど価格が下がったように表示される
|
47
47
|
|
48
|
-
どういった結果を得たいのか提示してもらえれば削除なのか価格変更なのか
|
49
|
-
|
48
|
+
調整しました。
|
1
追記
answer
CHANGED
@@ -2,4 +2,48 @@
|
|
2
2
|
3/7のアッガイは3個入荷したのか、5個入荷して2個売れたのかわかりません。
|
3
3
|
|
4
4
|
この手の在庫管理は月初在庫を確定しておき、そこから入出庫データを
|
5
|
-
たしたり引いたりして特定日のstokを計算してください
|
5
|
+
たしたり引いたりして特定日のstokを計算してください
|
6
|
+
|
7
|
+
# 追記
|
8
|
+
|
9
|
+
```SQL
|
10
|
+
create table ganpura(id varchar(20),name varchar(20),price int,stock int,d date,unique(id,d));
|
11
|
+
insert into ganpura values
|
12
|
+
('MS-06','ザク',2000,3,'2017-03-06'),
|
13
|
+
('MS-09','ドム',2500,3,'2017-03-06'),
|
14
|
+
('MSM-07','ズゴック',1700,3,'2017-03-06'),
|
15
|
+
('MS-06','ザク',2000,0,'2017-03-07'),
|
16
|
+
('MS-09','ドム',2500,3,'2017-03-07'),
|
17
|
+
('MSM-07','ズゴック',1700,3,'2017-03-07'),
|
18
|
+
('MSM-04','アッガイ',2000,3,'2017-03-07'),
|
19
|
+
('MS-09','ドム',2000,3,'2017-03-08'),
|
20
|
+
('MSM-07','ズゴック',1700,3,'2017-03-08'),
|
21
|
+
('MSM-04','ガンダム',2000,3,'2017-03-08');
|
22
|
+
|
23
|
+
```
|
24
|
+
※条件:日付が連続していること
|
25
|
+
それが担保されないなら、前日の日付を探す処理が必要
|
26
|
+
|
27
|
+
3/6→3/7への変化
|
28
|
+
```SQL
|
29
|
+
select id,name
|
30
|
+
,-sum(stock*(d=(@d:='2017-03-07')- interval 1 day))+sum(stock*(d=@d)) as diff_stock
|
31
|
+
,-sum(price*(d=@d- interval 1 day))+sum(price*(d=@d)) as diff_price
|
32
|
+
from ganpura where d between @d- interval 1 day and @d
|
33
|
+
group by id
|
34
|
+
having diff_stock<>0 or diff_price<>0;
|
35
|
+
```
|
36
|
+
|id|name|diff_stock|diff_price|
|
37
|
+
|:--|:--|--:|--:|
|
38
|
+
|MS-06|ザク|-3|0|
|
39
|
+
|MSM-04|アッガイ|3|2000|
|
40
|
+
|
41
|
+
@d:='2017-03-07'の箇所を'2017-03-08'変更すれば
|
42
|
+
|id|name|diff_stock|diff_price|
|
43
|
+
|:--|:--|--:|--:|
|
44
|
+
|MS-06|ザク|0|-2000|
|
45
|
+
|MS-09|ドム|0|-500|
|
46
|
+
※ただしこれだとザクは削除されたけど価格が下がったように表示される
|
47
|
+
|
48
|
+
どういった結果を得たいのか提示してもらえれば削除なのか価格変更なのか
|
49
|
+
きりわけも可能
|