0

私はしばらくの間これに頭を悩ませようとしていて、ちょうど良い解決策を見つけることができないように思われるので、私はオーバーフローを調べています。私はこのように少し見えるテーブルを持っています:

[EmployeeId]  [int] IDENTITY(1,1)  NOT NULL,
[Name]  [varchar](255)  NOT NULL,
[Title]  [varchar](255)  NULL,
[QueueId]  [int]  NOT NULL,
[SupervisorId]  [int]  NULL,

従業員は、異なる時間間隔で1つのキューから別のキューに移動されます。特定の時間間隔でキューにいる人の数だけでなく、彼らが誰であるかを確認できるように、2番目のテーブルをどのように構成する必要がありますか?

4

3 に答える 3

0
queueid int
status varchar(20)
start datetime
end datetime
于 2013-02-23T07:07:54.333 に答える
0

2番目のテーブルには、主キー、日時、およびカウントの列が必要です。ただし、カウントとリストは異なる階層レベルにあるため、キュー内の人々をリストする3番目のテーブルが必要になります。

于 2013-02-23T10:27:17.377 に答える
0

テーブルは次のようになります。

[EmployeeId]  [int] IDENTITY(1,1)  NOT NULL,
[QueueId]  [int]  NOT NULL,
[Start] [datetime] NOT NULL,
[End] [datetime] NOT NULL

残念なことに、前の行に戻って「終了日」を指定する必要があります。私がそれをしている場合は、[End]をスキップして、[End]を提供するビューをテーブルの上に作成します。

ビューは次のようになります

SELECT A.[EmployeeId]
     , A.[QueueId]
     , A.[Start]
     , COALESCE(MIN([B.Start]),'9999-12-31') as [END]
  FROM Table A
  LEFT OUTER JOIN Table B
    ON A.[EmployeeId] = B.[EmployeeId]
   AND A.[Start] < B.[Start]

このようにすると、このビューに参加するときにBETWEENを使用できなくなります。>=[開始]と<[終了]と言わなければなりません。とにかく、日付/時刻の「丸め」単位を決定する必要がないため、より安全で堅牢です。

于 2013-02-23T16:58:09.867 に答える