【问题标题】:postgres query writing to find from my tables which guy exceeded the planned working hourpostgres 查询写作从我的表中查找哪个人超过了计划的工作时间
【发布时间】:2021-05-28 14:31:38
【问题描述】:
  1. 员工
  2. 员工 该图将显示一个简短的

我想找出哪个员工超过了在员工表中定义的工作时间 (TIME) 表示的计划工作时间。 我已经写了这个查询

  SELECT em.empid,  em.entrytime, em.exittime, em.break, e.firstname, e.lastname,e.defined_working_hours, SUM(em.exittime - em.entrytime)  AS workedhours, date_part('month',em.entrytime) FROM emplog AS em JOIN employee AS e ON e.empid = em.empid WHERE workedhours > defined_working_hours GROUP BY em.empid, e.defined_working_hours, em.entrytime, em.exittime, em.break, e.firstname, e.lastname, e.empid, date_part('month',em.entrytime) ORDER BY e.empid;

但我收到一个错误“工作时间”列不存在。

但我知道当我在没有“的情况下运行查询时列不存在” WHERE workedhours > defined_working_hours"

SELECT
    em.empid,
    em.entrytime,
    em.exittime,
    em.break,
    e.firstname,
    e.lastname,
    e.defined_working_hours,
    SUM(em.exittime - em.entrytime) AS workedhours,
    date_part('month', em.entrytime)
FROM emplog AS em
JOIN employee AS e ON e.empid = em.empid
GROUP BY
    em.empid,
    e.defined_working_hours,
    em.entrytime,
    em.exittime,
    em.break,
    e.firstname,
    e.lastname,
    e.empid,
    date_part('month', em.entrytime)
ORDER BY e.empid;

我得到一张桌子,但目的是找出哪些员工每周超过计划的工作时间超过 1 次。 可以在我出错的地方找到一些线索。

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    你需要使用having:

    ....
    having SUM(em.exittime - em.entrytime) > defined_working_hours
    ORDER BY e.empid;
    

    但是您的查询看起来不正确,我认为这就是您想要的:

    select * from employee AS e 
    join ( 
      select empid,
             to_char(entrytime , 'YYYY mm')) monthyear,
             SUM(exittime - entrytime)  workinghours
      from emplog
      group by empid,
             to_char(entrytime , 'YYYY mm')) 
    ) em
    ON e.empid = em.empid
    where  workinghours > defined_working_hours
    

    假设 defined_working_hours 是每月基数。

    【讨论】:

    • defined_working_hours 定义为“HH12:MI:SS”。我将进入时间更改为“2021-05-01 09:00:00”。我已将to_char(entrytime , 'YYYY mm')) monthyear 更改为to_char(entrytime , 'HH12:MI:SS')) monthyear,并将to_char(entrytime , 'YYYY mm')) 更改为to_char(entrytime , ' HH12:MI:SS'))。但它在“,”这一行to_char(entrytime , 'YYYY mm')) monthyear 处或附近给我语法错误,
    • @SimranjeetSingh 不确定您要达到什么目的,但这个答案本身应该可以回答您的问题。无需更改任何内容
    • 感谢您的回答我正在学习 postgresql 我是新手。但是你的回答对我帮助很大。
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多