回答編集履歴

4

コード微修正

2016/09/09 15:10

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -52,9 +52,9 @@
52
52
 
53
53
  SELECT
54
54
 
55
- MAX(商品1) AS 商品1
55
+ MAX(T.商品1) AS 商品1
56
56
 
57
- , MAX(商品2) AS 商品2
57
+ , MAX(T.商品2) AS 商品2
58
58
 
59
59
  FROM
60
60
 
@@ -98,7 +98,7 @@
98
98
 
99
99
  GROUP BY
100
100
 
101
- DUMMY
101
+ T.DUMMY
102
102
 
103
103
  ```
104
104
 

3

コードミス修正

2016/09/09 15:09

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  MAX(商品1) AS 商品1
56
56
 
57
- , MAX(商品) AS 商品2
57
+ , MAX(商品) AS 商品2
58
58
 
59
59
  FROM
60
60
 

2

誤爆修正

2016/09/09 15:08

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -42,11 +42,73 @@
42
42
 
43
43
 
44
44
 
45
+ 1レコードで取りたいとのことを見逃してました。
46
+
47
+ DBMSの記載がないのでベンダ依存しないもので書いてるとかんり不恰好に・・・
48
+
49
+ もっと簡単にかけそうな気はする・・・
50
+
51
+ ```SQL
52
+
53
+ SELECT
54
+
55
+ MAX(商品1) AS 商品1
56
+
57
+ , MAX(商品1) AS 商品2
58
+
59
+ FROM
60
+
61
+ (
62
+
63
+ SELECT
64
+
65
+ 1 AS DUMMY
66
+
67
+ , (CASE WHEN T1.日付 = T2.最大日付 THEN T1.商品 ELSE NULL END) AS 商品1
68
+
69
+ , (CASE WHEN T1.日付 = T2.最小日付 THEN T1.商品 ELSE NULL END) AS 商品2
70
+
71
+ FROM
72
+
73
+ SAMPLE_TABLE T1
74
+
75
+ INNER JOIN
76
+
77
+ (
78
+
79
+ SELECT
80
+
81
+ MAX(日付) AS 最大日付
82
+
83
+ ,  MIN(日付) AS 最小日付
84
+
85
+ FROM
86
+
87
+ SAMPLE_TABLE
88
+
89
+ WHERE
90
+
91
+ T.日付 BETWEEN '0113' AND '0119'
92
+
93
+ ) T2
94
+
95
+ ON T1.日付 IN (T2.最大日付, T2.最小日付)
96
+
97
+ ) T
98
+
99
+ GROUP BY
100
+
101
+ DUMMY
102
+
103
+ ```
104
+
105
+
106
+
45
107
  ---
46
108
 
47
109
  **補足**
48
110
 
49
- ただ反射的にはコード例を書いては見ましたが、
111
+ コード例を書いては見ましたが、
50
112
 
51
113
  SQLのコーディング力は思考錯誤しないと身につかないので、
52
114
 

1

追記

2016/09/09 15:07

投稿

Panzer_vor
Panzer_vor

スコア1636

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ぱっと思いつくクエリは以下です。
6
6
 
7
-
7
+ (※動作は見てないので動く保証はないです)
8
8
 
9
9
  ```SQL
10
10
 
@@ -39,3 +39,27 @@
39
39
  ON T1.日付 IN (T2.最大日付, T2.最小日付)
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ ---
46
+
47
+ **補足**
48
+
49
+ ただ反射的にはコード例を書いては見ましたが、
50
+
51
+ SQLのコーディング力は思考錯誤しないと身につかないので、
52
+
53
+ こういうパターンの場合はやりたいことを段階的に行えばよいかと思います。
54
+
55
+
56
+
57
+ 0. 該当する日付期間で絞り込む(「SQL 範囲指定」で検索して色々な例を見てみて下さい)
58
+
59
+ 0. あるデータの最大値、最小値を取得する(「SQL 最大 最小」で検索して色々な例を見てみて下さい)
60
+
61
+ 0. 取得した最大値または最小値に該当するデータを取得する(「sql or 複数」で検索して色々な例を見てみて下さい)
62
+
63
+
64
+
65
+ 1つ1つの課題するSQLを書けたら、後は組み合わせるだけです。