我有一张名为"预算"有关每个月不同国家/地区的销售预算的数据。
我需要创建一个条件查询,它会为给定月份的每个国家/地区提取预算数据。
如果尚未添加特定国家/地区的预算,则查询应返回上个月的预算(将始终存在)。
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发送查询。
感谢您的贡献!
答案 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)
上的索引。