|
分類:[.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
|