SQL Server查询以根据计划获取可用员工
我有两个表,父表Employees和子表Employees\u Availability,如下所示: 员工表: 员工计划表: 如何创建一个查询,在给定的日期/时间和组中返回第一个可用的员工?我正在使用SQL Server 2012。以下是我开始做但被卡住的事情:SQL Server查询以根据计划获取可用员工,sql,sql-server,database,Sql,Sql Server,Database,我有两个表,父表Employees和子表Employees\u Availability,如下所示: 员工表: 员工计划表: 如何创建一个查询,在给定的日期/时间和组中返回第一个可用的员工?我正在使用SQL Server 2012。以下是我开始做但被卡住的事情: Select top 1 Name from Empolyees e join? Employees_Schedule s on e.employeesID = s.EmployeesID where
Select top 1
Name
from
Empolyees e join? Employees_Schedule s
on
e.employeesID = s.EmployeesID
where
e.group = 'Sales'
and DATENAME(Weekday,'5/24/2016 10:00') = s.Day
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' >= CAST(s.from AS TIME)
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' <= CAST(s.to AS TIME)
order by
e.availability_order
谢谢您查看过车窗功能和CTE了吗?你可以很容易地做到这一点,例如
Row_Number() OVER(PARTITION BY day ORDER BY starttime ASC) as ColumnName
结合谓词
其中columnName=1和groupName='groupName'
有关详细信息,请阅读有关超限的BOL和CTE 您是否查看过窗口功能和CTE?你可以很容易地做到这一点,例如
Row_Number() OVER(PARTITION BY day ORDER BY starttime ASC) as ColumnName
结合谓词
其中columnName=1和groupName='groupName'
有关详细信息,请阅读有关超限的BOL和CTE 看来你们很接近了。如果将SQL的主要部分包装在中并使用,则可以找到第一个可用的:
;with cte as (
Select top 1
Name,
row_number() over (order by ea.From) PrioritySequence
from
Empolyees e join? Employees_Schedule s
on
e.employeesID = s.EmployeesID
where
e.group = 'Sales'
and DATENAME(Weekday,'5/24/2016 10:00') = s.Day
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' >= CAST(s.from AS TIME)
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' <= CAST(s.to AS TIME)
)
select *
from cte
where PrioritySequence = 1
看起来你很接近了。如果将SQL的主要部分包装在中并使用,则可以找到第一个可用的:
;with cte as (
Select top 1
Name,
row_number() over (order by ea.From) PrioritySequence
from
Empolyees e join? Employees_Schedule s
on
e.employeesID = s.EmployeesID
where
e.group = 'Sales'
and DATENAME(Weekday,'5/24/2016 10:00') = s.Day
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' >= CAST(s.from AS TIME)
and CAST('5/24/2016 10:00' AS TIME) 'hh:mm' <= CAST(s.to AS TIME)
)
select *
from cte
where PrioritySequence = 1
时间是如何存储在from和to中的?那些是瓦查尔吗?还有,为什么要在这里加上“2016年5月24日10:00”?为什么不仅仅是s.day='Monday'和s.from<'10:00'和s.to>'10:00'的位置?“5/24/2016 10:00”这句话会从一个变量或什么东西进入这个话题吗?是的,from和to是varchar。日期只是一个示例,我可以根据需要在查询中替换它或使用getdate—20多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法替换,因此不鼓励使用它。我将编辑。时间如何存储在“从”和“到”中?那些是瓦查尔吗?还有,为什么要在这里加上“2016年5月24日10:00”?为什么不仅仅是s.day='Monday'和s.from<'10:00'和s.to>'10:00'的位置?“5/24/2016 10:00”这句话会从一个变量或什么东西进入这个话题吗?是的,from和to是varchar。日期只是一个示例,我可以根据需要在查询中替换它或使用getdate—20多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法替换,因此不鼓励使用它。我会编辑。