回答編集履歴

3

追記

2019/09/02 02:58

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -15,4 +15,26 @@
15
15
  -- 並び順指定、この並び順から先頭1件を取得できる
16
16
  order by ri2.date desc
17
17
  ) as X
18
+ ```
19
+
20
+ ## 追記
21
+ 「サブクエリ内で括弧の外側のテーブルの情報は条件に指定できません」これが引っかかるのですが
22
+ select側に記述した場合カッコの外側の値を使って指定できます。
23
+ 複数項目持ってくるとエラーになるのですが、項目が1つの場合ならサブクエリで処理できるはずです。
24
+
25
+ ```sql
26
+ select f.horse_id,f.race_id,ri.date
27
+ ,(
28
+ select top 1 ri2.date--,ri2.race_id ←これはエラー
29
+ from feature f2
30
+ inner join race_info ri2 on ri2.race_id = f2.race_id
31
+ -- 条件は質問文からはうまく読み取れないのでなんとなく
32
+ where f2.horse_id=f.horse_id
33
+ and ri2.date<ri.date
34
+ -- 並び順指定、この並び順から先頭1件を取得できる
35
+ order by ri2.date desc
36
+ ) as date2
37
+ from feature f
38
+ inner join race_info ri on f.race_id = ri.race_id
39
+
18
40
  ```

2

追記

2019/09/02 02:58

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -1,4 +1,5 @@
1
1
  apply句を使用すればよろしいかと思います。そのような場合に使います。
2
+ 条件読み取って再度追記してみました。
2
3
 
3
4
  ```sql
4
5
  select f.horse_id,f.race_id,ri.date,X.race_id2,X.date2
@@ -6,9 +7,11 @@
6
7
  inner join race_info ri on f.race_id = ri.race_id
7
8
  outer apply (
8
9
  select top 1 ri2.race_id as race_id2,ri2.date as date2
9
- from race_info ri2
10
+ from feature f2
11
+ inner join race_info ri2 on ri2.race_id = f2.race_id
10
12
  -- 条件は質問文からはうまく読み取れないのでなんとなく
13
+ where f2.horse_id=f.horse_id
11
- where ri2.date<ri.date
14
+ and ri2.date<ri.date
12
15
  -- 並び順指定、この並び順から先頭1件を取得できる
13
16
  order by ri2.date desc
14
17
  ) as X

1

誤字修正

2019/09/02 02:37

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  from feature f
6
6
  inner join race_info ri on f.race_id = ri.race_id
7
7
  outer apply (
8
- select top 1 race_id as race_id2,date as date2
8
+ select top 1 ri2.race_id as race_id2,ri2.date as date2
9
9
  from race_info ri2
10
10
  -- 条件は質問文からはうまく読み取れないのでなんとなく
11
11
  where ri2.date<ri.date