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

質問編集履歴

4

GROUP BY句の漏れを修正しました。

2021/07/28 14:07

投稿

PauT
PauT

スコア1

title CHANGED
File without changes
body CHANGED
@@ -37,6 +37,7 @@
37
37
  |1/5|火|
38
38
  |1/6|水|
39
39
 
40
+ 以降省略
40
41
 
41
42
  つまり要件としては、
42
43
  ・基準日以前で最も新しい入力日
@@ -60,9 +61,10 @@
60
61
  カレンダー
61
62
  join(
62
63
  select
63
- id,MAX(入力日)
64
+ ID,MAX(入力日)
64
65
  from
65
- 元データ) a2
66
+ 元データ
67
+ group by ID) a2
66
68
  on
67
69
  a1.ID=a2.ID
68
70
  and
@@ -71,7 +73,7 @@
71
73
  where
72
74
  カレンダー.曜日 = 金
73
75
  and
74
- a1.入力日 < カレンダー.日付
76
+ a1.入力日 <= カレンダー.日付
75
77
  ```
76
78
 
77
79
  出力されるデータは以下のような形である。

3

コードの記述漏れを修正しました。

2021/07/28 14:07

投稿

PauT
PauT

スコア1

title CHANGED
File without changes
body CHANGED
@@ -70,6 +70,8 @@
70
70
 
71
71
  where
72
72
  カレンダー.曜日 = 金
73
+ and
74
+ a1.入力日 < カレンダー.日付
73
75
  ```
74
76
 
75
77
  出力されるデータは以下のような形である。

2

基準日について説明を加えました。

2021/07/28 13:47

投稿

PauT
PauT

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  ##やりたいこと
2
2
  以下のようなデータをSQLで抽出すること。
3
3
 
4
+ ◆作りたいデータ(要点抜粋)
4
5
  |ID|基準日|入力日|入力データ|
5
6
  |--:|--:|--:|:--:|
6
7
  |101|1/1|12/30|A|
@@ -16,7 +17,7 @@
16
17
 
17
18
 
18
19
  上記を構成する元データは以下のような形である。
19
- ◆元データ
20
+ ◆元データ(要点抜粋)
20
21
  |ID|入力日|入力データ|
21
22
  |--:|--:|:--:|
22
23
  |101|12/30|A|
@@ -42,6 +43,12 @@
42
43
  ・その際の入力データ
43
44
  の2点を、基準日ごとに抽出することである。
44
45
 
46
+ ※基準日について
47
+ ・毎週金曜日を基準日として考える。
48
+ ・基準日はカレンダーのデータベースから取得する。
49
+ ・毎週の入力日について、金曜日にチェックできるようにする。
50
+ ・基準日ごとに最新の入力日と入力データを取得する。
51
+
45
52
  ##うまくいかないポイント
46
53
  以下のようなSQLを記載したが、データが途中で途切れてしまう。
47
54
  ```ここに言語を入力

1

カレンダー情報が漏れていたので、追記しました。

2021/07/28 13:30

投稿

PauT
PauT

スコア1

title CHANGED
File without changes
body CHANGED
@@ -26,6 +26,17 @@
26
26
  |102|1/4|E|
27
27
  |102|1/22|F|
28
28
 
29
+ ◆カレンダー(追記しました)
30
+ |日付|曜日|
31
+ |--:|:--:|
32
+ |1/1|金|
33
+ |1/2|土|
34
+ |1/3|日|
35
+ |1/4|月|
36
+ |1/5|火|
37
+ |1/6|水|
38
+
39
+
29
40
  つまり要件としては、
30
41
  ・基準日以前で最も新しい入力日
31
42
  ・その際の入力データ
@@ -35,9 +46,11 @@
35
46
  以下のようなSQLを記載したが、データが途中で途切れてしまう。
36
47
  ```ここに言語を入力
37
48
  select
38
- ID,入力日,入力データ
49
+ ID,入力日,入力データ,カレンダー.日付 --「元データ」は省略します
39
50
  from
40
51
  元データ a1
52
+ cross join
53
+ カレンダー
41
54
  join(
42
55
  select
43
56
  id,MAX(入力日)
@@ -47,6 +60,9 @@
47
60
  a1.ID=a2.ID
48
61
  and
49
62
  a1.入力日=a2.入力日
63
+
64
+ where
65
+ カレンダー.曜日 = 金
50
66
  ```
51
67
 
52
68
  出力されるデータは以下のような形である。