DateTime値を保持するScheduledTime列がこのテーブルにあります。これらは開始時刻が 3時間です。上記の日時値は、3時間のテストのための時間を開始しているタイムスロット列を取得する(SQLクエリ)
SELECT ScheduledTime from Schedule;
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-16 16:34:36.000
2012-03-20 09:14:48.000
2012-03-20 13:14:48.000
2012-03-20 17:14:48.000
2012-03-20 21:14:48.000
2012-04-14 17:13:19.000
2012-04-14 21:13:19.000
2012-04-15 01:13:19.000
2012-04-15 05:13:19.000
2012-04-15 09:13:19.000
2012-04-15 13:13:19.000
2012-04-15 17:13:19.000
2012-04-15 21:13:19.000
2012-04-16 01:13:19.000
2012-04-16 05:13:19.000
2012-04-16 13:13:19.000
2012-04-16 17:13:19.000
2012-04-17 01:13:19.000
2012-04-17 05:13:19.000
2012-04-17 13:13:19.000
2012-04-18 18:29:16.000
2012-04-19 15:48:12.000
2012-04-19 19:10:00.000
2012-04-19 23:47:00.000
2012-04-20 10:27:28.000
2012-04-20 17:27:00.000
: 列には、次のようになります。だから私は3時間のテストのために次の利用可能なスロットを取得する必要があります。既存のテストやcurrentTime + 1時間以内に対応できる場合はベストでしょう。
タスクは、ScheduledTime列から取得した3時間スロットの開始時間を保持する列(SlotsColumn)を生成することです。SlotsColumn値は> {fn Now()}つまりCurrentTimeです。
オプションは、2008年
I have tried this:
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [ScheduledTime]) AS rn
FROM [dbo].[Schedule]
WHERE [ScheduledTime] IS NOT NULL
)
SELECT TOP(1)
DATEADD(second,10800, mc.ScheduledTime) AS NextTime
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
WHERE (DATEDIFF(SECOND, mc.ScheduledTime, mp.ScheduledTime) - 10800) >= 10800
order by mc.ScheduledTime DESC
SQL Serverを使用してクエリが中1つの有効な開始時刻のリストを返し、それがどのような値を持っていない場合、それは1時間に+
をCurrentTimeをを与えるべきであるということです未来、それが存在する場合のみ。
上記のサンプルデータには、 '2012-04-20 03:47:00.000'が返されます。これは '2012-04-20 17:27:00.000'に別のテストがあるとは考えていないため間違っています'重複してはいけません。 希望の出力は「2012-04-20 12:27:00.000」となります。「2012-04-20 10:27:28.000」のテストの後、「2012-04-20」のテストの前です17 :27:00.000 '、3時間のテストのための完全なスロット。 私のCurrentTimeは '2012-04-20 11:45:23.393'
有効時間が存在しない場合、CurrentTime + 1時間を返すようにするにはどうすればよいですか?
これはC#で実行できますが、SQLクエリを試行しています。
ヘルプ/ヒントをお願いします。
何を試しましたか?希望の出力を添付してください。 'id'のような別の列があり、' id'が 'ScheduledTime'によってソートされていますか? – fancyPants
'ScheduledTime'のすべてのインスタンスを見つけるためには、それらの後ろに3hrの明確なウィンドウを持つクエリが必要です。クリアウィンドウが見つからない場合、CurrentTime + 1hrを返しますか? – Paddy
が、私はこれをしようとしています。 を '行の \t \t( \t \t SELECT * [ScheduledTime] BY、ROW_NUMBER()OVER(ORDER)[DBO] FROM \t \t AS RN AS [スケジュール] \t \t [ScheduledTime] \t \t \t \t \t \t NULLされていない)NextTimeAS DATEADD(第2、10800、mc.ScheduledTime)を選択 WHERE(DATEDIFF(SECOND、mc.ScheduledTime、mp.ScheduledTime) - - 10800)> = 10800 AND DATEADD(第2、10800、MC行MC FROM行が ON mc.rn = mp.rn融点JOIN。 ScheduleTime)> {fn Now()} mc.ScheduledTime' はいScheduleIDがあります。 あなたの質問は「次にScheduledTimeでソートされたIDですか」と表示されませんでした。 – dushyantp