SQL子查询和计数



我想要一些列,并且只有当一个雇员在同一天有多个约会日期时才需要。

Appointmenttable

最初

tbody> <<tr>1111//1313
employeeIDemployeenameappointments ment_datetype
11詹姆斯1/1/2020办公室
詹姆斯1/1/2020会议
詹姆斯2020学校
12玛莎2/1/2020办公室
Shane3/1/2020学校
Shane3/1/2020办公室

您可以使用count()的窗口版本

SELECT x.employeeid,
x.employeename,
x.appointment_date,
x.type,
x.count
FROM (SELECT a.employeeid,
a.employeename,
a.appointment_date,
a.type,
count(*) OVER (PARTITION BY a.employeeid,
a.appointment_date) count
FROM appointment a
WHERE a.date >= '2020-01-01'
AND a.date < '2021-01-01') x
WHERE x.count > 1;

指出:

  • employeename不应该出现在表appointment中,这是多余的。应该有一个员工表,其中可以通过ID查找姓名(和其他详细信息)。
  • 避免使用BETWEEN日期/时间。使用一个范围来比较不包含它的结束。这样,当精度提高时,您就不必担心查询不再获取所有正确的记录。

这是你想要的吗?

SELECT 
a.employeeID,
a.employeeName,
a.appointment_date,
a.type,
T.count
FROM 
appointment a
Left Join (SELECT b.EmployeeID, COUNT(b.employeeID) count 
FROM appointment b
WHERE a.appointment_date >= '2020-01-01'
AND b.appointment_date < '2021-01-03'
GROUP BY b.employeeID )T on T.EmployeeID=a.EmployeeID
WHERE 
T.count>1

相关内容

  • 没有找到相关文章

最新更新