回答編集履歴
4
コード微修正
answer
CHANGED
@@ -25,8 +25,8 @@
|
|
25
25
|
もっと簡単にかけそうな気はする・・・
|
26
26
|
```SQL
|
27
27
|
SELECT
|
28
|
-
MAX(商品1) AS 商品1
|
28
|
+
MAX(T.商品1) AS 商品1
|
29
|
-
, MAX(商品2) AS 商品2
|
29
|
+
, MAX(T.商品2) AS 商品2
|
30
30
|
FROM
|
31
31
|
(
|
32
32
|
SELECT
|
@@ -48,7 +48,7 @@
|
|
48
48
|
ON T1.日付 IN (T2.最大日付, T2.最小日付)
|
49
49
|
) T
|
50
50
|
GROUP BY
|
51
|
-
DUMMY
|
51
|
+
T.DUMMY
|
52
52
|
```
|
53
53
|
|
54
54
|
---
|
3
コードミス修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
```SQL
|
27
27
|
SELECT
|
28
28
|
MAX(商品1) AS 商品1
|
29
|
-
, MAX(商品
|
29
|
+
, MAX(商品2) AS 商品2
|
30
30
|
FROM
|
31
31
|
(
|
32
32
|
SELECT
|
2
誤爆修正
answer
CHANGED
@@ -20,9 +20,40 @@
|
|
20
20
|
ON T1.日付 IN (T2.最大日付, T2.最小日付)
|
21
21
|
```
|
22
22
|
|
23
|
+
1レコードで取りたいとのことを見逃してました。
|
24
|
+
DBMSの記載がないのでベンダ依存しないもので書いてるとかんり不恰好に・・・
|
25
|
+
もっと簡単にかけそうな気はする・・・
|
26
|
+
```SQL
|
27
|
+
SELECT
|
28
|
+
MAX(商品1) AS 商品1
|
29
|
+
, MAX(商品1) AS 商品2
|
30
|
+
FROM
|
31
|
+
(
|
32
|
+
SELECT
|
33
|
+
1 AS DUMMY
|
34
|
+
, (CASE WHEN T1.日付 = T2.最大日付 THEN T1.商品 ELSE NULL END) AS 商品1
|
35
|
+
, (CASE WHEN T1.日付 = T2.最小日付 THEN T1.商品 ELSE NULL END) AS 商品2
|
36
|
+
FROM
|
37
|
+
SAMPLE_TABLE T1
|
38
|
+
INNER JOIN
|
39
|
+
(
|
40
|
+
SELECT
|
41
|
+
MAX(日付) AS 最大日付
|
42
|
+
, MIN(日付) AS 最小日付
|
43
|
+
FROM
|
44
|
+
SAMPLE_TABLE
|
45
|
+
WHERE
|
46
|
+
T.日付 BETWEEN '0113' AND '0119'
|
47
|
+
) T2
|
48
|
+
ON T1.日付 IN (T2.最大日付, T2.最小日付)
|
49
|
+
) T
|
50
|
+
GROUP BY
|
51
|
+
DUMMY
|
52
|
+
```
|
53
|
+
|
23
54
|
---
|
24
55
|
**補足**
|
25
|
-
|
56
|
+
コード例を書いては見ましたが、
|
26
57
|
SQLのコーディング力は思考錯誤しないと身につかないので、
|
27
58
|
こういうパターンの場合はやりたいことを段階的に行えばよいかと思います。
|
28
59
|
|
1
追記
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
最新・最古の日付が複数ある場合、
|
2
2
|
どのようなデータが取得すべきかは要件次第ですが、
|
3
3
|
ぱっと思いつくクエリは以下です。
|
4
|
-
|
4
|
+
(※動作は見てないので動く保証はないです)
|
5
5
|
```SQL
|
6
6
|
SELECT
|
7
7
|
T1.*
|
@@ -18,4 +18,16 @@
|
|
18
18
|
T.日付 BETWEEN '0113' AND '0119'
|
19
19
|
) T2
|
20
20
|
ON T1.日付 IN (T2.最大日付, T2.最小日付)
|
21
|
-
```
|
21
|
+
```
|
22
|
+
|
23
|
+
---
|
24
|
+
**補足**
|
25
|
+
ただ反射的にはコード例を書いては見ましたが、
|
26
|
+
SQLのコーディング力は思考錯誤しないと身につかないので、
|
27
|
+
こういうパターンの場合はやりたいことを段階的に行えばよいかと思います。
|
28
|
+
|
29
|
+
0. 該当する日付期間で絞り込む(「SQL 範囲指定」で検索して色々な例を見てみて下さい)
|
30
|
+
0. あるデータの最大値、最小値を取得する(「SQL 最大 最小」で検索して色々な例を見てみて下さい)
|
31
|
+
0. 取得した最大値または最小値に該当するデータを取得する(「sql or 複数」で検索して色々な例を見てみて下さい)
|
32
|
+
|
33
|
+
1つ1つの課題するSQLを書けたら、後は組み合わせるだけです。
|