MySQL语句的不同格式/效率
这是一个运行此语句的不同方式的问题,或者是一种使其更有效的方式 本声明旨在列出最快离开现场的所有员工,但他们也必须在今天到达现场MySQL语句的不同格式/效率,mysql,performance,join,subquery,Mysql,Performance,Join,Subquery,这是一个运行此语句的不同方式的问题,或者是一种使其更有效的方式 本声明旨在列出最快离开现场的所有员工,但他们也必须在今天到达现场 SELECT e.EmpName, cs.SiteName FROM Employee e INNER JOIN EmployeeAssignment ea ON e.EmpId = ea.EmpId INNER JOIN CustomerSite cs ON ea.CustId = cs.CustId WHE
SELECT
e.EmpName,
cs.SiteName
FROM
Employee e
INNER JOIN
EmployeeAssignment ea
ON
e.EmpId = ea.EmpId
INNER JOIN
CustomerSite cs
ON
ea.CustId = cs.CustId
WHERE
e.EmpId IN
(
SELECT
ea.EmpId
FROM
EmployeeAssignment ea
WHERE
ea.EndDate IN
(
SELECT
MIN(ea.EndDate)
FROM
EmployeeAssignment ea
WHERE
GETDATE() BETWEEN ea.StartDate AND ea.EndDate
GROUP BY
CustId
));
如果有人想用更好的方式写这封信,请回复谢谢:)试试这个
SELECT
e.EmpName,
cs.SiteName
FROM
Employee e
INNER JOIN
(
SELECT custid,empid from EmployeeAssignment ea1 where Enddate=(
select MIN(ea.EndDate)
FROM
EmployeeAssignment ea
WHERE
GETDATE() BETWEEN ea.StartDate AND ea.EndDate
and ea.custid=ea1.custid
)
) as ea
ON
e.EmpId = ea.EmpId
INNER JOIN
CustomerSite cs
ON
ea.CustId = cs.CustId
这可能有效,也可能无效:
SELECT
e.EmpName,
cs.SiteName
FROM
Employee e
INNER JOIN
EmployeeAssignment ea
ON
e.EmpId = ea.EmpId
INNER JOIN
CustomerSite cs
ON
ea.CustId = cs.CustId
GROUP BY
e.EmpName,
cs.SiteName
HAVING ea.EndDate =
(
SELECT
MIN(ea.EndDate)
FROM
EmployeeAssignment ea
WHERE
GETDATE() BETWEEN ea.StartDate AND ea.EndDate);
这不起作用,因为如果ea.EndDate不在聚合或order by子句中,则不能在having子句中包含它,但在ordeby子句中,它不会显示所有结果。感谢您的尝试,您可以将ea.EndDate放在MIN aggregate之后,因为我们正在寻找最小日期,因为最后一个ea.CustId是无效的列名??