繁体   English   中英

获取过去两个月的记录(今天的记录列表除外)

[英]get records of past two months excluding today's record list

我有两个查询:

以下查询返回给我今天工作的警卫详细信息:

一:

 SELECT
    `guards`.`surname`
    , `contracted_guard`.`con_id`
    , `guards`.`street`
    , `shifts`.`advised_sign_in`
FROM
    `guards`
LEFT JOIN `contracted_guard` ON `contracted_guard`.`guard_id` = `guards`.`gid`
LEFT JOIN `shifts` ON `shifts`.`guard_id` = `guards`.`gid`
WHERE advised_sign_in >=CURDATE()
AND advised_sign_in < CURDATE()+ INTERVAL 1 DAY
GROUP BY `guards`.`gid`
ORDER BY `guards`.`given_names` ASC
LIMIT 400

现在,下面的第二个查询将向我返回今天不工作的警卫详细信息,但过去两个月至少登录了一次(这是因为要获取活动警卫的列表,因为系统包含庞大的警卫列表)。

查询二:

SELECT
    `guards`.`surname`
    , `contracted_guard`.`con_id`
    , `guards`.`street`
    , `shifts`.`advised_sign_in`
FROM
    `guards`
    LEFT JOIN `contracted_guard` 
        ON (`contracted_guard`.`guard_id` = `guards`.`gid`)
    LEFT JOIN `shifts` 
        ON (`shifts`.`guard_id` = `guards`.`gid`)
WHERE (`shifts`. advised_sign_in !=CURDATE() AND advised_sign_in >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
GROUP BY `guards`.`gid`
ORDER BY `guards`.`given_names` ASC;

这两个查询工作正常。 但是问题是第二个查询返回的是那些也正在工作但日期已经过时的警卫的结果(这是因为他们在过去两个月也已签约)。 尽管我想要的警卫名单不包括那些今天正在工作但过去两个月工作过的警卫。

任何提示将不胜感激。

您想将当前日期的条件从where移到having子句:

SELECT `guards`.`surname`, `contracted_guard`.`con_id`, `guards`.`street`, `shifts`.`advised_sign_in`
FROM `guards`
     LEFT JOIN `contracted_guard` 
        ON (`contracted_guard`.`guard_id` = `guards`.`gid`)
     LEFT JOIN `shifts` 
        ON (`shifts`.`guard_id` = `guards`.`gid`)
WHERE advised_sign_in >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
GROUP BY `guards`.`gid`
HAVING sum(`shifts`. advised_sign_in = CURDATE() ) = 0
ORDER BY `guards`.`given_names` ASC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM