0

一段时间以来,我一直试图解决这个问题,但似乎找不到一个好的解决方案,所以我正在咨询溢出问题。我有一张看起来有点像这样的桌子:

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

员工以不同的时间间隔从一个队列移动到另一个队列。我应该如何构建我的第二张桌子,这样我不仅可以看到在特定时间间隔内排队的人数,还可以看到他们是谁?

4

3 回答 3

0
queueid int
status varchar(20)
start datetime
end datetime
于 2013-02-23T07:07:54.333 回答
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 回答
0

您的第二个表应该有一个主键、日期时间和计数列。但是,您将需要第三张表来列出队列中的人员,因为计数和列表位于不同的层级。

于 2013-02-23T10:27:17.377 回答