条件 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
的总支出。
备注:
我修复了原始代码,使其成为一个有效的聚合查询; select
和 group by
子句中的列必须 一致 :select
子句中的每个 non-aggregated 列必须在group by
子句(单独留下 functionaly-dependent 列 - 但您的问题没有提到)
不要对标识符(例如列别名)使用单引号!它们应该只用于文字字符串;对标识符使用反引号,或者更好的是,使用不需要引用的标识符
我有一个包含列的数据库
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
的总支出。
备注:
我修复了原始代码,使其成为一个有效的聚合查询;
select
和group by
子句中的列必须 一致 :select
子句中的每个 non-aggregated 列必须在group by
子句(单独留下 functionaly-dependent 列 - 但您的问题没有提到)不要对标识符(例如列别名)使用单引号!它们应该只用于文字字符串;对标识符使用反引号,或者更好的是,使用不需要引用的标识符