早上好,
我正在尝试将两个查询合并为一个,以便可以将结果数组填充到单个表中。从单个表中提取数据,并且必须对其中一个列进行数学计算。这是我目前的情况:
SELECT
laboratory,
SUM(total_produced_week) AS total_produced_sum,
SUM(total_produced_over14) AS total_over14_sum,
100*(SUM(total_produced_over14)/sum(total_produced_week)) as divided_sum,
max(case when metrics_date =maxdate then total_backlog else null end) as total_backlog,
max(case when metrics_date =maxdate then days_workable else null end) as days_workable,
max(case when metrics_date =maxdate then workable_backlog else null end) as workable_backlog,
max(case when metrics_date =maxdate then deferred_over_30_days else null end) as deferred_over_30_days
FROM
test,
(
select max(metrics_date) as maxdate
from metrics
) as x
WHERE
YEAR(metrics_date) = YEAR(CURDATE())
AND MONTH(metrics_date) = MONTH(CURDATE())
GROUP BY
laboratory
ORDER BY 1 ASC
以下是细分:
对于每个实验室网站,我需要:
1)执行MONTH TO DATE(仅当前月份)总和,除以每个站点乘以100以获得百分比。
2)仅显示最近更新日期(metrics_date)的其他列(total_backlog,days_workable,workable_backlog,deferred_over_30_days)。
上面的查询执行#1就好了 - 我得到一个total_produced_sum,total_over14_sum和divide_sum列,并且数学正确。
然而,#2中提到的其他列返回NULL。表格中提供了最近更新日期的数据,因此列应报告该数据。好像我对CASE有问题,但是我对这个功能不太熟悉,所以可能不正确。
我正在运行MySQL 5.0.45
提前感谢任何建议! 克里斯
P.S。以下是两个正常工作的原始查询。这些需要结合起来,以便将完整的结果集输出到由实验室组织的表格中。
查询1:
SELECT SUM(total_produced_week) AS total_produced_sum,
SUM(total_produced_over14) AS total_over14_sum
FROM test
WHERE laboratory = 'Site1'
AND YEAR(metrics_date) = YEAR(CURDATE()) AND MONTH(metrics_date) = MONTH(CURDATE())
查询2:
SELECT laboratory, total_backlog, days_workable, workable_backlog, deferred_over_30_days,
items_over_10_days, open_ncs, total_produced_week, total_produced_over14
FROM metrics
WHERE metrics_date = (select MAX(metrics_date) FROM metrics)
ORDER BY laboratory ASC
答案 0 :(得分:0)
操作员错误。
我创建了一个原始表(名为“metrics”)的副本到名为“test”的表。然后,我修改了新“test”表中的metrics_date,以包含2011年1月(月初至今)的数据。虽然执行数学运算的查询的第一部分是使用“测试”表(并且正常工作),但是提取最近更新数据的后半部分是使用原始的“指标”表,其中没有任何表本月有metrics_date的行。
当我将查询更改为对查询的两个部分使用“test”时,一切都按预期工作。现在我觉得自己真傻。
非常感谢,伙计们!