SQL历史更改

时间:2013-02-23 07:05:29

标签: sql sql-server

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

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

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

3 个答案:

答案 0 :(得分:0)

queueid int
status varchar(20)
start datetime
end datetime

答案 1 :(得分:0)

您的第二个表应包含主键,日期时间和计数列。但是,您需要一个第3个表格,列出队列中的人员,因为计数&列表驻留在不同的层次级别。

答案 2 :(得分:0)

我会说这个表看起来像这样:

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

不幸的是你必须回到前一行的“结束日期”。如果我是那个人,我将跳过[结束]并在表格顶部创建一个视图,提供[结束]。

视图看起来像

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。你必须说&gt; = [开始]和&lt; [结束]。无论如何,它更安全,更强大,因为您不必决定日期/时间“舍入”单位。