当日期存储在单独的行中时,如何创建日期范围查询?

时间:2012-01-09 16:16:12

标签: mysql

一个名为“报告”的表格:

|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仍然很陌生,但我真的需要这个来为我正在开发的项目工作。

1 个答案:

答案 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'让你的生活变得轻松!我真诚地质疑你的数据库设计实践。这是一个关系数据库,而不是键值存储 - 使用它就像一个。