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

わんくま同盟

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

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


■95330 / )  SQLServer での処理方法について
□投稿者/ ファイター (15回)-(2020/07/16(Thu) 16:25:18)

分類:[.NET 全般] 

以下のようにテストプログラムを作ってみたのですが、
本番ではデータ数が多く時間がすごくかかりました。
時間のかからない方法ってありますか?

DECLARE @TBL1 TABLE (
 MDATE DATETIME,
 MNAME VARCHAR(10)
)

INSERT INTO @TBL1
SELECT '2020-07-02 00:00:00.000', 'N-1'
UNION SELECT '2020-07-03 00:00:00.000', 'N-2'

DECLARE @TBL2 TABLE (
 MNAME VARCHAR(10),
 RNUM INT
)

INSERT INTO @TBL2
SELECT 'N-1', 6
UNION SELECT 'N-2', 7

DECLARE @TBL3 TABLE (
 MDATE DATETIME
)

--土日祝を除く日付(カレンダー)
INSERT INTO @TBL3
SELECT '2020-07-01'
UNION SELECT '2020-07-02'
UNION SELECT '2020-07-05'
UNION SELECT '2020-07-06'
UNION SELECT '2020-07-07'
UNION SELECT '2020-07-08'
UNION SELECT '2020-07-09'
UNION SELECT '2020-07-10'
UNION SELECT '2020-07-13'

SELECT *
FROM (
 SELECT  TBL1.MDATE, TBL1.MNAME, TBL2.RNUM, TBL3.MDATE AS GETDAT, ROW_NUMBER() OVER(PARTITION BY TBL1.MNAME ORDER BY TBL3.MDATE) AS RNO
 FROM  @TBL1 AS TBL1
 LEFT  OUTER JOIN (
     SELECT *
     FROM @TBL2
     ) AS TBL2
     ON TBL2.MNAME = TBL1.MNAME
 LEFT  OUTER JOIN (
 SELECT *
 FROM @TBL3
 ) AS TBL3
 ON TBL3.MDATE > TBL1.MDATE
 ) AS TBL
WHERE RNUM = TBL.RNO



返信 編集キー/


管理者用

- Child Tree -