我一直试图绕过这个问题一段时间,似乎无法找到一个好的解决方案,所以我正在咨询溢出。我有一张看起来像这样的桌子:
[EmployeeId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NOT NULL,
[Title] [varchar](255) NULL,
[QueueId] [int] NOT NULL,
[SupervisorId] [int] NULL,
员工以不同的时间间隔从一个队列移动到另一个队列。我应该如何构建我的第二个表,这样我不仅可以看到在特定时间间隔内队列中的人数以及他们是谁?
答案 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; [结束]。无论如何,它更安全,更强大,因为您不必决定日期/时间“舍入”单位。