1

次の情報を含むテーブルがあります。

Conf_Start_Time
Part_Start_Time
Part_End_Time

Part_Start_Timet が から の間にある場合、レコードは時刻 t でアクティブであると見なされますPart_End_Time

私がやりたいのは、すべてのレコードを分析して、指定された日にアクティブなレコードの数を判断することです。私が提案する解決策は、1 日の各分 (たとえば、午前 6 時から午後 9 時まで) をループし、その日の各レコードをチェックして、指定された時刻 t にユーザーがアクティブであったかどうかを判断することです。

SQLでこれに対する解決策はありますか、それともコードの解決策を進める必要がありますか?

コードでは、すべてのレコードをメモリにプルし、時間 (午前 6 時から午後 9 時まで) をループし、指定された日の各レコードをテストして、現在の時間にアクティブかどうかを判断します。アクティブな場合はカウンターをインクリメントし、そうでない場合は次のレコードに進みます。次回は、カウンターを再初期化し、その日をループします。

SQL Server 2005 を使用しています。

更新: 私が探している出力は、午前 6 時から午後 9 時までの最大同時使用量の配列です。

Record  Conf_Start_Time    Part_Start_Time     Part_End_Time
1.      6/5/2012 13:40:00  6/5/2012 13:41:23   6/5/2012 13:45:27
2.      6/5/2012 13:40:00  6/5/2012 13:40:23   6/5/2012 13:47:29
3.      6/5/2012 13:40:00  6/5/2012 13:42:55   6/5/2012 13:44:17

したがって、13:40:00 の時点でアクティブなレコードは 0 です。時刻 13:41:00 に 1 つのレコードがアクティブです。時刻 13:42:00 に 2 つのレコードがアクティブです。13:43:00 の時点で 3 つのレコードがアクティブです。

そして、1 日の 1 分ごとのデータが必要です。そして、その月の毎日。このタイプのループは SQL でも実行できますか?

4

4 に答える 4

2

たとえば、2012 年 8 月 7 日にアクティブなすべてのレコードが必要な場合は、次のようにします。

select * from your_table
where '2012-08-07' between Part_Start_Time and Part_End_Time
于 2012-08-07T19:46:55.883 に答える
0

これを試して:

DECLARE @auxDate datetime

SELECT *
  FROM your_table
 WHERE @auxDate BETWEEN Part_Start_Time AND Part_End_Time

Between 句は包括的です。一部の日付を含めたくない場合は、次の使用を検討してください。

DECLARE @auxDate datetime

SELECT *
  FROM your_table
 WHERE @auxDate >= Part_Start_Time
   AND @auxDate <= Part_End_Time
于 2012-08-07T19:50:21.320 に答える