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

回答編集履歴

7

追記

2021/08/03 06:23

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -39,6 +39,23 @@
39
39
  where 基準.担当CD='01'
40
40
  order by ta.担当CD, ta.出勤日 desc
41
41
  ```
42
+ サブクエリーを使用するとこんな感じ。
43
+ ```SQL
44
+ select ta.*, tb.*
45
+ from ((
46
+ select ta.担当CD, ta.出勤日
47
+ , (select Max(売上日付) from テーブルB where 担当CD = ta.担当CD and 売上日付 <= ta.出勤日) as 売上日付
48
+ from テーブルA as ta
49
+ ) as 基準
50
+ inner join テーブルA as ta
51
+ on 基準.担当CD=ta.担当CD
52
+ and 基準.出勤日=ta.出勤日
53
+ ) left join テーブルB as tb
54
+ on 基準.担当CD=tb.担当CD
55
+ and 基準.売上日付=tb.売上日付
56
+ where 基準.担当CD='01'
57
+ order by ta.担当CD, ta.出勤日 desc
58
+ ```
42
59
  #追記2
43
60
  出勤日と前の出勤日の間の売上日付の場合は以下
44
61
  ```SQL

6

追記

2021/08/03 06:22

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -38,4 +38,22 @@
38
38
  and 基準.売上日付=tb.売上日付
39
39
  where 基準.担当CD='01'
40
40
  order by ta.担当CD, ta.出勤日 desc
41
+ ```
42
+ #追記2
43
+ 出勤日と前の出勤日の間の売上日付の場合は以下
44
+ ```SQL
45
+ select ta.*, tb.*
46
+ from ((
47
+ select ta.担当CD, ta.出勤日
48
+ , DMax("出勤日", "テーブルA", "担当CD='" & 担当CD & "' and 出勤日 <= #" & 出勤日 & "#") as 前出勤日
49
+ from テーブルA as ta
50
+ ) as 基準
51
+ inner join テーブルA as ta
52
+ on 基準.担当CD=ta.担当CD
53
+ and 基準.出勤日=ta.出勤日
54
+ ) left join テーブルB as tb
55
+ on 基準.担当CD=tb.担当CD
56
+ and 基準.出勤日 >= tb.売上日付 and 基準.前出勤日 < tb.売上日付
57
+ where 基準.担当CD='01'
58
+ order by ta.担当CD, ta.出勤日 desc
41
59
  ```

5

修正

2021/08/03 05:42

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -27,7 +27,7 @@
27
27
  select ta.*, tb.*
28
28
  from ((
29
29
  select ta.担当CD, ta.出勤日
30
- , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and ta.売上日付 <= #" & 出勤日 & "#") as 売上日付
30
+ , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 <= #" & 出勤日 & "#") as 売上日付
31
31
  from テーブルA as ta
32
32
  ) as 基準
33
33
  inner join テーブルA as ta

4

追記

2021/08/03 05:38

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -20,4 +20,22 @@
20
20
  and 基準.売上日付=tb.売上日付
21
21
  where 基準.担当CD='01'
22
22
  order by ta.担当CD, ta.出勤日 desc
23
+ ```
24
+ # 追記
25
+ 出勤日以降の売上日付は関係ないという事だと以下の様な感じ
26
+ ```SQL
27
+ select ta.*, tb.*
28
+ from ((
29
+ select ta.担当CD, ta.出勤日
30
+ , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and ta.売上日付 <= #" & 出勤日 & "#") as 売上日付
31
+ from テーブルA as ta
32
+ ) as 基準
33
+ inner join テーブルA as ta
34
+ on 基準.担当CD=ta.担当CD
35
+ and 基準.出勤日=ta.出勤日
36
+ ) left join テーブルB as tb
37
+ on 基準.担当CD=tb.担当CD
38
+ and 基準.売上日付=tb.売上日付
39
+ where 基準.担当CD='01'
40
+ order by ta.担当CD, ta.出勤日 desc
23
41
  ```

3

修正

2021/08/03 05:28

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -9,13 +9,13 @@
9
9
  select ta.担当CD, ta.出勤日
10
10
  , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 <= #" & 出勤日 & "#") as 以前直近売上日
11
11
  , DMin("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 >= #" & 出勤日 & "#") as 以降直近売上日
12
- from テーブルA ta
12
+ from テーブルA as ta
13
13
  ) as t
14
14
  ) as 基準
15
- inner join テーブルA ta
15
+ inner join テーブルA as ta
16
16
  on 基準.担当CD=ta.担当CD
17
17
  and 基準.出勤日=ta.出勤日
18
- ) left join テーブルB tb
18
+ ) left join テーブルB as tb
19
19
  on 基準.担当CD=tb.担当CD
20
20
  and 基準.売上日付=tb.売上日付
21
21
  where 基準.担当CD='01'

2

修正

2021/08/03 05:18

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 <= #" & 出勤日 & "#") as 以前直近売上日
11
11
  , DMin("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 >= #" & 出勤日 & "#") as 以降直近売上日
12
12
  from テーブルA ta
13
- ) t
13
+ ) as t
14
14
  ) as 基準
15
15
  inner join テーブルA ta
16
16
  on 基準.担当CD=ta.担当CD

1

修正

2021/08/03 03:46

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -10,6 +10,7 @@
10
10
  , DMax("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 <= #" & 出勤日 & "#") as 以前直近売上日
11
11
  , DMin("売上日付", "テーブルB", "担当CD='" & 担当CD & "' and 売上日付 >= #" & 出勤日 & "#") as 以降直近売上日
12
12
  from テーブルA ta
13
+ ) t
13
14
  ) as 基準
14
15
  inner join テーブルA ta
15
16
  on 基準.担当CD=ta.担当CD