【问题标题】:Timediff calucate where queryTimediff 计算 where 查询
【发布时间】:2017-10-10 06:45:17
【问题描述】:

我有一个查询,我计算每个用户的工作时间。

$sql = "
SELECT actief
     , userid
     , DATE_FORMAT(datum, '%x - %V')
     , username
     , min_urenperweek
     , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff
  FROM " . TBL_URENREGISTRATIE . " ur
  JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid
 GROUP 
    BY YEARWEEK(datum)
     , userid 
 ORDER 
    BY us.username ASC
    " ;

我想要的是:如果 min_urenperweek 可以说是 40 小时,而 timediff 是超过 40 小时,我不希望它显示它,如果它小于 40,那么我想显示它

我试过Where min_urenperweek <= timediff,但没用

【问题讨论】:

  • 您可以使用 HAVING,它位于 GROUP BY 子句之后
  • 你有一个例子我可以如何使用它吗?
  • 你可能想给 DATE_FORMAT 一个别名

标签: php mysql database time


【解决方案1】:
  1. GROUP BY 子句中的字段应与 SELECT 子句中的字段相同,但不是聚合函数。

  2. 您不能在 WHERE 子句中指定来自 SELECT 子句的别名。

  3. 如果要过滤聚合结果,则不能在 WHERE 子句中执行此操作,HAVING 子句就是为此目的而存在的

试试这样的

$sql = "
SELECT actief
     , userid
     , DATE_FORMAT(datum, '%x - %V')
     , username
     , min_urenperweek
     , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff
  FROM " . TBL_URENREGISTRATIE . " ur
  JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid
 GROUP 
    BY actief
     , userid 
     , DATE_FORMAT(datum, '%x - %V')
     , username
     , min_urenperweek   
 HAVING min_urenperweek <= timediff
 ORDER 
    BY us.username ASC
    " ;

【讨论】:

  • 格拉格格丹 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多