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

回答編集履歴

4

コード微修正

2016/09/09 15:10

投稿

Panzer_vor
Panzer_vor

スコア1636

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

コードミス修正

2016/09/09 15:09

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -26,7 +26,7 @@
26
26
  ```SQL
27
27
  SELECT
28
28
  MAX(商品1) AS 商品1
29
- , MAX(商品) AS 商品2
29
+ , MAX(商品) AS 商品2
30
30
  FROM
31
31
  (
32
32
  SELECT

2

誤爆修正

2016/09/09 15:08

投稿

Panzer_vor
Panzer_vor

スコア1636

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

追記

2016/09/09 15:07

投稿

Panzer_vor
Panzer_vor

スコア1636

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を書けたら、後は組み合わせるだけです。