一个名为“报告”的表格:
|id|report_field_id|report_value_row_id|report_value|
|1|1|1|2012-01-05|
|2|2|1|Some text|
|3|3|1|109.00|
|4|1|2|2012-01-06|
|5|2|2|More text|
|6|3|3|889.73|
|7|1|3|2012-01-07|
|8|2|3|More text|
|9|3|3|889.73|
我想创建一个select report,它汇总report_value,其中report__field_id等于3,其中report_field_id 1是特定日期或某个日期范围之间。我不确定我是否应该使用子查询,加入或什么。我对MySQL仍然很陌生,但我真的需要这个来为我正在开发的项目工作。
答案 0 :(得分:1)
好吧,让我们试试这个:
select
sum(r.report_value) as value
from
report r
where
r.report_field_id = 3
and exists
(
select
1
from
report r1
where
r1.report_value_row_id = r.report_value_row_id
and str_to_date(report_value, '%Y-%m-%d') between '2012-01-04' and '2012-01-05'
and r1.report_field_id = 1
)
这个查询说,你的桌面设计相当糟糕。为什么不提供日期,名称和价值列?这样,你就可以做select sum(value) from report where date between '2012-01-04' and '2012-01-05'
让你的生活变得轻松!我真诚地质疑你的数据库设计实践。这是一个关系数据库,而不是键值存储 - 使用它就像一个。