我有一个数据库,您可以在其中添加员工评论。 我希望得到一份声明,说明上个月没有审核过的所有员工。
到目前为止,我有:
SELECT id, max(date), staff_id, reviewer_id FROM `review` WHERE date < DATE_SUB(NOW(), INTERVAL 1 MONTH) GROUP BY staff
然而,如果我可以使用where子句中的max(date)列,那么这会删除我要检查的日期,例如:
SELECT id, max(date) as testdate, staff_id, reviewer_id FROM `review` WHERE testdate < DATE_SUB(NOW(), INTERVAL 1 MONTH) GROUP BY staff
将获得我想要的结果,但这不能在SQL中完成
有什么想法吗?
答案 0 :(得分:1)
尝试此查询
select id from staff where
id not in
(select staff_id from review where date >DATE_SUB(NOW(), INTERVAL 1 MONTH) )
- 更新以获取审核日期
select a.id from staff a where
a.id not in
(select b.staff_id from review b where b.date >DATE_SUB(NOW(), INTERVAL 1 MONTH))
inner join
(select max(r.reviewDate), r.staff_id from review r group by r.staff_id) test
on test.staff_id=a.id
答案 1 :(得分:0)
你应该可以使用HAVING:
SELECT id, max(date) as testdate, staff_id, reviewer_id FROM `review` GROUP BY staff HAVING testdate < DATE_SUB(NOW(), INTERVAL 1 MONTH)
但是,您也不会看到任何从未进行审核的员工。要获得这些人,您需要加入staff
表。
答案 2 :(得分:0)
您可以尝试这样:
SELECT id, max(date), staff_id, reviewer_id
FROM `reviews`
GROUP BY staff
HAVING max( date ) < DATE_SUB( NOW( ) , INTERVAL 1
MONTH )
通常我们必须在group by而不是where子句中使用having子句,因为在where子句中不允许进行聚合函数比较。
答案 3 :(得分:0)
我认为应该这样做:
select id,staff_id,max(date),reviewer_id from review where date < (NOW() - INTERVAL 1 MONTH) group by staff_id;