我想要一些列,并且只有当一个雇员在同一天有多个约会日期时才需要。
Appointment
table
最初
employeeID | employeename | appointments ment_date | type | 11 | 詹姆斯 | 1/1/2020 | 办公室 | 11
---|---|---|---|
詹姆斯 | 1/1/2020 | 会议 | |
詹姆斯 | 2020 | //学校 | |
12 | 玛莎 | 2/1/2020 | 办公室 |
Shane | 3/1/2020 | 学校 | |
Shane | 3/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