teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

調整

2017/03/07 13:17

投稿

yambejp
yambejp

スコア117892

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

追記

2017/03/07 13:17

投稿

yambejp
yambejp

スコア117892

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
+ きりわけも可能