回答編集履歴

1

DB 変更に伴い修正

2018/08/27 10:35

投稿

tacsheaven
tacsheaven

スコア13703

test CHANGED
@@ -2,11 +2,15 @@
2
2
 
3
3
  言い換えると、「実行当日から(当日を含まず)営業日のみを数えて3つめ」です。
4
4
 
5
+
6
+
5
- ので
7
+ SQL Server 2012 以降であれば offset fetch が使えるので
6
8
 
7
9
  ```SQL
8
10
 
11
+ SELECT
12
+
9
- SELECT seq, years_months, dates
13
+ seq, years_months, dates
10
14
 
11
15
  FROM MC
12
16
 
@@ -14,12 +18,50 @@
14
18
 
15
19
  flag = '1' AND
16
20
 
17
- CONCAT(years_months + dates) > TO_CHAR(CURRENT_DATE,'YYYYMMDD')
21
+ CONCAT(years_months, dates) > CONVERT(112, CURRENT_DATE)
18
22
 
19
23
  ORDER BY years_months ASC, dates ASC
20
24
 
21
- OFFSET 2 ROWS FETCH FIRST 1
25
+ OFFSET 2 FETCH 1
22
26
 
23
27
  ```
24
28
 
29
+
30
+
31
+ 2008 以前ですと offset fetch が使えないので、一ひねりして
32
+
33
+ 「実行当日から後の営業日を順に3つ取り出して」
34
+
35
+ 「その順番を逆転させて最初の一つ(=もっとも後の営業日)を取り出す」
36
+
37
+ とするかな。
38
+
39
+
40
+
41
+ ```SQL
42
+
43
+ SELECT TOP (1) *
44
+
45
+ FROM (
46
+
47
+ SELECT TOP (3)
48
+
49
+ seq, years_months, dates
50
+
51
+ FROM MC
52
+
53
+ WHERE
54
+
55
+ flag = '1' AND
56
+
57
+ CONCAT(years_months, dates) > CONVERT(112, CURRENT_DATE)
58
+
59
+ ORDER BY years_months ASC, dates ASC
60
+
61
+ )
62
+
63
+ ORDER BY years_months DESC, dates DESC
64
+
65
+ ```
66
+
25
- よいのかな?
67
+ 行けるかな?