条件 SQL 如果在过去 10 天内更新了任何 TimeEntries,则查询相关任务的所有 TimeEntires 总和

Conditional SQL Query Which Sums ALL TimeEntires of Related Task if any TimeEntries Updated in Last 10 Days

我有一个包含列的数据库

timeEntryIDs (Primary KEY), 
taskAssignmentIDs, 
Spent(Sum of two columns product), and 
updatedAT. 

每个 taskAssignmentID 都有多个时间条目 added/updated 在不同的日期。

我正在尝试构建一个 SQL 查询,我可以每周 运行 为我提供在每个 taskAssignmentID 上花费的总计,其中 updatedAT 大于今天的日期减去 10 天。

所以基本上,如果在过去 10 天内创建或更新了 timeEntry,请提供在该 taskAssignmentID 上花费的新总计。

我试过但未能想出这个办法,如有任何帮助,我们将不胜感激。这是我能做的最好的:

SELECT projectName
     , projectID
     , clientName
     , clientID
     , taskName
     , taskAssignmentID
     , SUM(userAssignment_hourlyRate * roundedHours) AS 'Spent'
     , updatedAt 
  FROM DB
 WHERE updatedAt > ADDDATE(CURRENT_DATE(), -10) 
 GROUP 
    BY taskAssignmentID

问题在于它仅在过去 10 天内更新了 SUMS 时间条目。如果指向该 taskAssignmentID 的任何 timeEntry 在过去 10 天内已更新,我想要给定 taskAssignmentID 的所有时间条目。

非常感谢!

您可以使用 having 子句:

select taskassignmentid, sum(userassignment_hourlyrate * roundedhours) as spent
from mytable
group by taskassignmentid
having max(updatedat) >= current_date - interval 10 day

这将计算最近 updatedat 少于 10 天的每个 taskassignmentid 的总支出。

备注:

  • 我修复了原始代码,使其成为一个有效的聚合查询; selectgroup by 子句中的列必须 一致 select 子句中的每个 non-aggregated 列必须在group by 子句(单独留下 functionaly-dependent 列 - 但您的问题没有提到)

  • 不要对标识符(例如列别名)使用单引号!它们应该只用于文字字符串;对标识符使用反引号,或者更好的是,使用不需要引用的标识符