【问题标题】:Creating a table of workers with first shift last week创建上周第一次轮班的工人表
【发布时间】:2019-07-03 13:27:57
【问题描述】:

我正在尝试提取上周第一次轮班的工人列表。

现在,如果我在我的 where 子句 (WHERE c.temp_nr ='XXXX') 中放置一个上周第一次轮班的特定工人,我的 SQL 就可以工作,但是当我删除该子句时,它只是超时

SELECT MIN(p.start_date), CONCAT(c.first_name, ' ', c.last_name) AS 'c.fullname', c.temp_nr
FROM contactstable c 
LEFT JOIN projectlines p on c.temp_nr = p.candidate_number 
WHERE c.temp_nr ='XXXX' and c.contact_type = 'Candidate' 
HAVING MIN(p.start_date) between DATE_SUB( CURDATE( ) , INTERVAL (dayofweek(CURDATE())+6) 
DAY ) 
AND DATE_SUB( CURDATE( ) , INTERVAL (dayofweek(CURDATE())) 
DAY )

【问题讨论】:

    标签: mysql database datetime


    【解决方案1】:

    使用GROUP BY c.temp_nr

    SELECT MIN(p.start_date), CONCAT(c.first_name, ' ', c.last_name) AS 'c.fullname', c.temp_nr
    FROM contactstable c
    LEFT JOIN projectlines p on c.temp_nr = p.candidate_number
    WHERE c.contact_type = 'Candidate'
    GROUP BY c.temp_nr
    HAVING
        MIN(p.start_date)
            between
                DATE_SUB(CURDATE(), INTERVAL (dayofweek(CURDATE())+6) DAY)
                AND DATE_SUB(CURDATE() , INTERVAL (dayofweek(CURDATE())) DAY)
    

    【讨论】:

    • 谢谢。这似乎可行,但查询大约需要 4 分钟。你知道什么给出了吗?
    • @Frederik 您应该在c.temp_nrp.candidate_number 上为您的表添加索引。
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多