回答編集履歴
5
訂正
answer
CHANGED
@@ -17,10 +17,11 @@
|
|
17
17
|
SQLの記述的には、抽出条件と結合条件が明確になっていませんね。
|
18
18
|
※記述変更するとインデックスの状況によっては、レスポンスが変化する可能性があります。
|
19
19
|
後はネストさせると可読性は上がると思います。
|
20
|
-
上記を踏まえ
|
20
|
+
上記を踏まえ色々と無駄を省くと、以下のようなSQLになります。
|
21
21
|
```SQL
|
22
22
|
select
|
23
|
+
substring(CARD_ISSUE_MONTH, 1, 4) As YEAR, substring(CARD_ISSUE_MONTH, 6, 2) AS MMONTH
|
23
|
-
|
24
|
+
, CARD_TYPE, PMP_ISSUER_CODE, PMP_ISSUER_NAME
|
24
25
|
, COUNT(PMP_MEMBER_ID) AS MEMBER_COUNT
|
25
26
|
, SUM(TRANSACT) AS TRANSACT_COUNT
|
26
27
|
, SUM(TRANSACT_003) AS TRANSACT_003_COUNT
|
@@ -28,8 +29,7 @@
|
|
28
29
|
from (
|
29
30
|
SELECT
|
30
31
|
TBL_MEMBER.*
|
31
|
-
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 1,
|
32
|
+
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 1, 7) AS CARD_ISSUE_MONTH
|
32
|
-
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 6, 2) AS MONTH_PART
|
33
33
|
, CASE
|
34
34
|
WHEN TBL_MEMBER.[PMP_CARD_TYPE] IS NULL THEN 0
|
35
35
|
WHEN TBL_MEMBER.[PMP_CARD_TYPE] = 1 THEN 1
|
@@ -49,7 +49,7 @@
|
|
49
49
|
AND TBL_MEMBER.[PMP_CARD_ISSUE_DATE] <> '0000-00-00'
|
50
50
|
) as base
|
51
51
|
GROUP BY
|
52
|
-
|
52
|
+
CARD_ISSUE_MONTH, CARD_TYPE, PMP_ISSUER_CODE, PMP_ISSUER_NAME
|
53
53
|
ORDER BY
|
54
|
-
|
54
|
+
CARD_ISSUE_MONTH
|
55
55
|
```
|
4
訂正
answer
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
FROM
|
43
43
|
[DWH_PONTA].[dbo].[PLMS_MEMBER_PROFILE] AS TBL_MEMBER
|
44
44
|
LEFT OUTER JOIN [DWH_PONTA].[dbo].[DAILY_TRX_PLMS] AS TBL_TRX
|
45
|
-
|
45
|
+
ON TBL_MEMBER.[PMP_MEMBER_ID] = TBL_TRX.[DTP_MEMBER_ID]
|
46
46
|
AND TBL_MEMBER.[PMP_ISSUER_CODE]=TBL_TRX.[DTP_COMPANY]
|
47
47
|
WHERE
|
48
48
|
TBL_MEMBER.[PMP_ISSUER_CODE] = '003'
|
3
修正
answer
CHANGED
@@ -20,11 +20,7 @@
|
|
20
20
|
上記を踏まえると、以下のようなSQLになります。
|
21
21
|
```SQL
|
22
22
|
select
|
23
|
-
YEAR_PART
|
24
|
-
, MONTH_PART
|
25
|
-
, CARD_TYPE
|
26
|
-
|
23
|
+
YEAR_PART, MONTH_PART, CARD_TYPE, PMP_ISSUER_CODE, PMP_ISSUER_NAME
|
27
|
-
, PMP_ISSUER_NAME
|
28
24
|
, COUNT(PMP_MEMBER_ID) AS MEMBER_COUNT
|
29
25
|
, SUM(TRANSACT) AS TRANSACT_COUNT
|
30
26
|
, SUM(TRANSACT_003) AS TRANSACT_003_COUNT
|
@@ -53,12 +49,7 @@
|
|
53
49
|
AND TBL_MEMBER.[PMP_CARD_ISSUE_DATE] <> '0000-00-00'
|
54
50
|
) as base
|
55
51
|
GROUP BY
|
56
|
-
YEAR_PART
|
57
|
-
, MONTH_PART
|
58
|
-
, CARD_TYPE
|
59
|
-
|
52
|
+
YEAR_PART, MONTH_PART, CARD_TYPE, PMP_ISSUER_CODE, PMP_ISSUER_NAME
|
60
|
-
, PMP_ISSUER_NAME
|
61
53
|
ORDER BY
|
62
|
-
YEAR_PART
|
63
|
-
|
54
|
+
YEAR_PART, MONTH_PART
|
64
55
|
```
|
2
修正
answer
CHANGED
@@ -31,7 +31,8 @@
|
|
31
31
|
, SUM(ACTIVATED) AS ACTIVATED_COUNT
|
32
32
|
from (
|
33
33
|
SELECT
|
34
|
+
TBL_MEMBER.*
|
34
|
-
|
35
|
+
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 1, 4) AS YEAR_PART
|
35
36
|
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 6, 2) AS MONTH_PART
|
36
37
|
, CASE
|
37
38
|
WHEN TBL_MEMBER.[PMP_CARD_TYPE] IS NULL THEN 0
|
@@ -39,9 +40,6 @@
|
|
39
40
|
WHEN TBL_MEMBER.[PMP_CARD_TYPE] = 0 THEN 0
|
40
41
|
ELSE 0
|
41
42
|
END AS CARD_TYPE
|
42
|
-
, TBL_MEMBER.[PMP_ISSUER_CODE]
|
43
|
-
, TBL_MEMBER.[PMP_ISSUER_NAME]
|
44
|
-
, TBL_MEMBER.[PMP_MEMBER_ID]
|
45
43
|
, CASE WHEN TBL_MEMBER.[PMP_LAST_TRX_DATE] IS NOT NULL THEN 1 ELSE 0 END AS TRANSACT
|
46
44
|
, CASE WHEN TBL_TRX.[DTP_MEMBER_ID] IS NOT NULL THEN 1 ELSE 0 END AS TRANSACT_003
|
47
45
|
, CASE WHEN TBL_MEMBER.[PMP_MOBILE_PHONE] IS NOT NULL THEN 1 ELSE 0 END AS ACTIVATED
|
1
追記
answer
CHANGED
@@ -8,4 +8,59 @@
|
|
8
8
|
substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 1, 4) as YERA_PART
|
9
9
|
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 6, 2) as MONTH_PART
|
10
10
|
```
|
11
|
-
のように文字列の部分的な抽出とすれば良いかと。
|
11
|
+
のように文字列の部分的な抽出とすれば良いかと。
|
12
|
+
|
13
|
+
追記
|
14
|
+
---
|
15
|
+
> 問題になっている個所以外にも課題があるかもしれませんが
|
16
|
+
|
17
|
+
SQLの記述的には、抽出条件と結合条件が明確になっていませんね。
|
18
|
+
※記述変更するとインデックスの状況によっては、レスポンスが変化する可能性があります。
|
19
|
+
後はネストさせると可読性は上がると思います。
|
20
|
+
上記を踏まえると、以下のようなSQLになります。
|
21
|
+
```SQL
|
22
|
+
select
|
23
|
+
YEAR_PART
|
24
|
+
, MONTH_PART
|
25
|
+
, CARD_TYPE
|
26
|
+
, PMP_ISSUER_CODE
|
27
|
+
, PMP_ISSUER_NAME
|
28
|
+
, COUNT(PMP_MEMBER_ID) AS MEMBER_COUNT
|
29
|
+
, SUM(TRANSACT) AS TRANSACT_COUNT
|
30
|
+
, SUM(TRANSACT_003) AS TRANSACT_003_COUNT
|
31
|
+
, SUM(ACTIVATED) AS ACTIVATED_COUNT
|
32
|
+
from (
|
33
|
+
SELECT
|
34
|
+
substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 1, 4) AS YEAR_PART
|
35
|
+
, substring(TBL_MEMBER.[PMP_CARD_ISSUE_DATE], 6, 2) AS MONTH_PART
|
36
|
+
, CASE
|
37
|
+
WHEN TBL_MEMBER.[PMP_CARD_TYPE] IS NULL THEN 0
|
38
|
+
WHEN TBL_MEMBER.[PMP_CARD_TYPE] = 1 THEN 1
|
39
|
+
WHEN TBL_MEMBER.[PMP_CARD_TYPE] = 0 THEN 0
|
40
|
+
ELSE 0
|
41
|
+
END AS CARD_TYPE
|
42
|
+
, TBL_MEMBER.[PMP_ISSUER_CODE]
|
43
|
+
, TBL_MEMBER.[PMP_ISSUER_NAME]
|
44
|
+
, TBL_MEMBER.[PMP_MEMBER_ID]
|
45
|
+
, CASE WHEN TBL_MEMBER.[PMP_LAST_TRX_DATE] IS NOT NULL THEN 1 ELSE 0 END AS TRANSACT
|
46
|
+
, CASE WHEN TBL_TRX.[DTP_MEMBER_ID] IS NOT NULL THEN 1 ELSE 0 END AS TRANSACT_003
|
47
|
+
, CASE WHEN TBL_MEMBER.[PMP_MOBILE_PHONE] IS NOT NULL THEN 1 ELSE 0 END AS ACTIVATED
|
48
|
+
FROM
|
49
|
+
[DWH_PONTA].[dbo].[PLMS_MEMBER_PROFILE] AS TBL_MEMBER
|
50
|
+
LEFT OUTER JOIN [DWH_PONTA].[dbo].[DAILY_TRX_PLMS] AS TBL_TRX
|
51
|
+
AND TBL_MEMBER.[PMP_MEMBER_ID] = TBL_TRX.[DTP_MEMBER_ID]
|
52
|
+
AND TBL_MEMBER.[PMP_ISSUER_CODE]=TBL_TRX.[DTP_COMPANY]
|
53
|
+
WHERE
|
54
|
+
TBL_MEMBER.[PMP_ISSUER_CODE] = '003'
|
55
|
+
AND TBL_MEMBER.[PMP_CARD_ISSUE_DATE] <> '0000-00-00'
|
56
|
+
) as base
|
57
|
+
GROUP BY
|
58
|
+
YEAR_PART
|
59
|
+
, MONTH_PART
|
60
|
+
, CARD_TYPE
|
61
|
+
, PMP_ISSUER_CODE
|
62
|
+
, PMP_ISSUER_NAME
|
63
|
+
ORDER BY
|
64
|
+
YEAR_PART
|
65
|
+
, MONTH_PART
|
66
|
+
```
|