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

回答編集履歴

5

誤字訂正

2021/08/26 20:39

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -20,11 +20,11 @@
20
20
  ( そうでないと、Yes, No 判定にはなりません )
21
21
    
22
22
  3. ご希望の結果セットに```配信月```という年月の項目がありますけど
23
- このでグループ化するのは適切ではないでしょう。
23
+ この演算フィールドでグループ化するのは適切ではないでしょう。
24
24
  配信が漏れてたりなどの事情で
25
25
  配信期間が月を跨いだりすると```メール名```を基準とした集計にはなりません。
26
26
  そのため、月間表示をご希望の場合は、私が記述した```SQL```で申し上げると
27
- SELECT句で```format( min(delivery ), 'yyyy-MM' )```
27
+ SELECT句で```format( min( delivery ), 'yyyy-MM' )```
28
28
  とすればいいでしょう。
29
29
 
30
30
  以上のことを考慮に入れて```SQL```を書いてみました。

4

表内における日付のデリミタを訂正

2021/08/26 20:39

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -78,4 +78,4 @@
78
78
  | メール名 | 初回配信日 | 最終配信日 | 配信数 | 購入数 |
79
79
  |:--------:|:----------:|:----------:|:------:|:------:|
80
80
  | MailA | 2021-01-01 | 2021-01-11 | 3 | 1 |
81
- | MailB | 2021/01/06 | 2021-01-12 | 2 | 1 |
81
+ | MailB | 2021-01-06 | 2021-01-12 | 2 | 1 |

3

文言修正

2021/08/26 20:36

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -5,8 +5,8 @@
5
5
  配信日フィールド、購入日フィールドとも、値が```日付```になっていますけど
6
6
  実際のテーブルに登録されている値は
7
7
  日付だけでなく、時刻まで記録された```タイムスタンプ```になっているでしょうか。
8
- 両フィルドにおけ```差分```の単位は、日付ではなく```時間```であるため
8
+ 通常、何らかのイベントやトリガをトレースする単位は
9
- どちらかのデータ型が Date型 だったりすると設計ミスに該当します。
9
+ 「日」ではなく「日時」であが多いと思います。
10
10
   
11
11
  1. SQL文を拝見する限り、把握なさってはいるでしょうけど「 ```購入``` 」に該当するかは、
12
12
  **メールを配信してから、次回配信日までの間** とする必要があるでしょう。
@@ -17,12 +17,15 @@
17
17
   
18
18
  2. 次回までの配信日に```複数回購入```していただいた場合でも
19
19
  購入者に対する集計は、配信直後だけの```1回きり```とする必要があるでしょう。
20
- ( Yes, No 判定なので当た )
20
+ ( そうでないと、Yes, No 判定にはなりません )
21
21
    
22
22
  3. ご希望の結果セットに```配信月```という年月の項目がありますけど
23
- この表現は適切ではないでしょう。
23
+ このでグループ化するのは適切ではないでしょう。
24
- 特定の人に配信が漏れてたりなどの事情で
24
+ 配信が漏れてたりなどの事情で
25
25
  配信期間が月を跨いだりすると```メール名```を基準とした集計にはなりません。
26
+ そのため、月間表示をご希望の場合は、私が記述した```SQL```で申し上げると
27
+ SELECT句で```format( min(delivery ), 'yyyy-MM' )```
28
+ とすればいいでしょう。
26
29
 
27
30
  以上のことを考慮に入れて```SQL```を書いてみました。
28
31
  ※ 他に抜けがあるかもしれないですけど、とりあえず掲載します

2

文章でおかしな箇所を修正

2021/08/26 20:31

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  ご希望の結果は理解できましたけど
2
- 集計に対する前提条件やご考慮は色々と不足しているように思います。
2
+ 集計に対する前提条件やご考慮は少し不足しているように思います。
3
3
 
4
4
  0. ご提示のサンプルデータでは
5
5
  配信日フィールド、購入日フィールドとも、値が```日付```になっていますけど
@@ -8,7 +8,7 @@
8
8
  両フィールドにおける```差分```の単位は、日付ではなく```時間```であるため
9
9
  どちらかのデータ型が Date型 だったりすると設計ミスに該当します。
10
10
   
11
- 1. 「 ```購入``` 」に該当するかは、
11
+ 1. SQL文を拝見する限り、把握なさってはいるでしょうけど「 ```購入``` 」に該当するかは、
12
12
  **メールを配信してから、次回配信日までの間** とする必要があるでしょう。
13
13
  上限を決めないと、配信後1年経過した人が```該当者```になってしまう
14
14
  なんて可能性がありますし

1

ブザービート購入を有効化

2021/08/26 19:00

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -50,9 +50,9 @@
50
50
  , count( distinct it.購入者名 )
51
51
  FROM ot
52
52
  LEFT JOIN 購入履歴データテーブル it
53
- ON ot.target = it.購入者名
53
+ ON ot.target = it.購入者名
54
- AND ot.delivery < it.購入日
54
+ AND ot.delivery < it.購入日
55
- AND ot.expiration > it.購入日
55
+ AND ot.expiration >= it.購入日
56
56
  GROUP BY ot.mail
57
57
  , ot.target
58
58
  , ot.delivery