MySQL:获取上个月未经审核的所有员工

时间:2012-03-16 05:10:15

标签: mysql sql database

我有一个数据库,您可以在其中添加员工评论。 我希望得到一份声明,说明上个月没有审核过的所有员工。

到目前为止,我有:

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中完成

有什么想法吗?

4 个答案:

答案 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;