1

私の質問をタイトルに入れるのは難しいです。私が探しているのは、過去 15 分間に実行するようにスケジュールされたタスクを確認する方法です。

現在、タスクを実行するウィンドウと、そのウィンドウ内でタスクを開始する頻度を示す表があります。ただし、このタイプのクエリの経験はありません。うまくいけば、誰かが少し助けてくれるでしょう。また、余分なテーブルを作成せずにこれを行いたいと言うべきです

集計表

| taskID | startTime | endTime | everyMinutes |
|________|___________|_________|______________|
| 135467 |    8:00   |  20:00  |      15      |
| 675314 |    7:15   |  13:45  |      30      |

たとえば、上の表で時間が 9:18 の場合、クエリは両方のタスクを返します。

| taskID | scheduledTime|
|________|______________|
| 135467 |     9:15     |
| 675314 |     9:15     |

9:35 に実行された場合、クエリは 1 つの結果のみを返します。

| taskID | scheduledTime|
|________|______________|
| 135467 |     9:30     |
4

2 に答える 2

2

数値テーブルを使用してScheduleテーブルを一連の行に展開し、行をフィルタリングして、過去15分以内のtaskID, scheduledTime行のみを返すことができます。scheduledTime

WITH expanded AS (
  SELECT
    s.taskID,
    scheduledTime = DATEADD(MINUTE, s.everyMinutes * n.N, s.startTime)
  FROM Schedule s
  INNER JOIN Numbers n
  ON n.N BETWEEN 0 AND DATEDIFF(MINUTE, s.startTime, s.endTime) / s.everyMinutes
)
SELECT e.*
FROM expanded e
CROSS APPLY (SELECT CAST(GETDATE() AS time)) x (now)
WHERE e.scheduledTime BETWEEN DATEADD(MINUTE, -15, x.now) AND x.now
;

SQL Fiddleで、このクエリを試してみることができます。

于 2012-08-28T22:51:06.810 に答える
-1

ポイント #1 : cron ジョブを使用してタスクをスケジュールし、データベース テーブルを使用して実際に実行されたジョブの履歴 (開始時刻、終了時刻、結果など) を保持する必要があります。これにより、より正確なレポートが得られます。すべてのジョブには例外があります (例: 週末に実行されないジョブ、祝日に実行されないジョブなど)。

ポイント #2 : データベースでこれを行うことはお勧めしません。データベースよりも C# や PHP の方がコーディングが簡単で、実行も高速です。

于 2012-08-28T16:54:17.590 に答える