C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Over句について

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■93614 / inTopicNo.1)  Over句について
  
□投稿者/ 犬夜叉 (35回)-(2019/12/27(Fri) 09:08:56)

分類:[.NET 全般] 

以下のような日付と休みのデータ(DATETABLE)があり

Date		Yasumi		
   :				
20191220	1		-4
20191221	2		
20191222	2		
20191223	1		-3
20191224	1		-2
20191225	1		-1
20191226	1		0
20191227	1		1
20191228	2		
20191229	2		
   :

今日(12/27)を境に平日で
以下のように何日後、何日前を得る場合

Date		Offdate
   :		
20191220	-4
20191223	-3
20191224	-2
20191225	-1
20191226	0
20191227	1
   :				

SELECT	Date, ROW_NUMBER() OVER(ORDER BY Date) AS Offdate
FROM	DATETABLE
WHERE	Yasumi = 1
	AND Date >= 20191227
UNION
SELECT	Date, 1 - ROW_NUMBER() OVER(ORDER BY Date DESC) AS Offdate
FROM	DATETABLE
WHERE	Yasumi = 1
	AND Date < 20191227

で、求めたのですがUnionを使用しないで
Over句のRowsを使用してできるような気がしたのですが
できないのでしょうか?



引用返信 編集キー/
■93616 / inTopicNo.2)  Re[1]: Over句について
□投稿者/ kiku (161回)-(2019/12/27(Fri) 11:56:25)
2019/12/27(Fri) 11:59:31 編集(投稿者)
2019/12/27(Fri) 11:58:44 編集(投稿者)
2019/12/27(Fri) 11:57:28 編集(投稿者)

<pre><pre>■No93614 (犬夜叉 さん) に返信

べたな方法で申し訳ないですが、下記のような方法もあります。
SQLServerで確認しています。
'2019-12-27'が存在しない場合は考慮していません。

SELECT
	[Date]
	,Yasumi
	,ROW_NUMBER() OVER(ORDER BY Date)
	-
	(
		select TTT.a
		from
		(
			SELECT
				[Date]
				,Yasumi
				,ROW_NUMBER() OVER(ORDER BY Date) AS a
			FROM DATETABLE
			where Yasumi = 1
		) as TTT
		where TTT.[Date] = '2019-12-27'
	)
	+ 1
	AS Offdate
FROM DATETABLE
where Yasumi = 1

引用返信 編集キー/
■93617 / inTopicNo.3)  Re[2]: Over句について
□投稿者/ 犬夜叉 (36回)-(2019/12/27(Fri) 13:15:42)
No93616 (kiku さん) に返信

ありがとうございます。
いまひとつ ROWS の使い方がわかりませんでした。

先に指定の日付の番号を求めるSQLは私も試しにやっていました。
すみませんでした。OVER 句などで指定日を基準にする方法はないみたいですね。

それより、
'2019-12-27'が存在しない場合は考慮していません
ですが・・・・
考慮する・しない以前にまったく考えてもいませんでした。

現状でいきます。
ありがとうございました。



解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ