条件MySQL查询的具体示例

时间:2018-02-25 13:21:42

标签: php mysql sql conditional

我有一张名为"预算"有关每个月不同国家/地区的销售预算的数据。

我需要创建一个条件查询,它会为给定月份的每个国家/地区提取预算数据。

如果尚未添加特定国家/地区的预算,则查询应返回上个月的预算(将始终存在)。

  country   | date       | budget
===================================
| Argentina | 2018-02-01 | $100
| Brazil    | 2018-02-01 | $350
| Brazil    | 2018-03-01 | $430
| Colombia  | 2018-02-01 | $100
| Chile     | 2018-02-01 | $100
| Chile     | 2018-03-01 | $75

示例:

如果我们提取的数据为2018-03-01'从上面的示例表中,返回值应为:

  country   | date       | budget
===================================
| Argentina | 2018-02-01 | $100
| Brazil    | 2018-03-01 | $430
| Colombia  | 2018-02-01 | $100
| Chile     | 2018-03-01 | $75

我想避免使用最新日期'想法(查询总是返回每个国家/地区的最新现有日期),因为新预算可以在当前月末之前添加到表中。

我试图找到一种方法在单个查询中完成它,但如果不可能,多个就可以了。

我使用PHP7向MariaDB发送查询。

感谢您的贡献!

1 个答案:

答案 0 :(得分:1)

这实际上是一个过滤问题。您想要日期在给定日期或之前的行:

select b.*
from budgets b
where b.date = (select max(b2.date)
                from budgets b2
                where b2.country = b.country and
                      b2.date <= '2018-03-01'
               );

在国家和月份的数据库中,绩效可能不是一个大问题。但如果是,则需要budgets(country, date)上的索引。