我试图在单个查询中选择以下数据:我有一个标准 mySQL 格式的日期变量,它允许 mySQL 选择语句,例如 YEAR(date) = '2011'
和MONTH(date) = '11'
选择 2011 年 11 月的所有数据。
我正在尝试SUM
四个不同时间范围内名为 sales 的变量:月至今、去年月至今、年至今和去年至今。
请假设我事先定义了这三个变量。 $currentYear
、$lastYear
和 $currentMonth
。
我想尝试减少数据库的负载,看看是否可以在单个查询中选择它。
提前致谢!
最佳答案
您可以将 SUM
与 CASE
技巧结合使用。它让我摆脱了过去的许多分析漏洞!
下面是一个底部有查询的示例。我不是 100% 确定“去年本月至今”和“去年至今”中应该包含什么,但希望您能理解我的目的。在查询中,您需要分别用 $currentYear
、$lastYear
和 $currentMonth
变量替换 2012、2011 和 1。
create table date_timeframe_example
(myDate datetime not null,
sales int not null default 0
);
insert into date_timeframe_example values (now() - interval 1 year + interval 3 day,51);
insert into date_timeframe_example values (now() - interval 1 year + interval 4 day,5);
insert into date_timeframe_example values (now() - interval 1 year + interval 5 day,7);
insert into date_timeframe_example values (now() - interval 1 year + interval 6 day,87);
insert into date_timeframe_example values (now() - interval 1 year + interval 7 day,12);
insert into date_timeframe_example values (now() - interval 1 year + interval 12 day,0);
insert into date_timeframe_example values (now() - interval 1 year - interval 4 day,1);
insert into date_timeframe_example values (now() - interval 1 year - interval 5 day,1235);
insert into date_timeframe_example values (now() - interval 1 year - interval 12 day,76);
insert into date_timeframe_example values (now() - interval 1 year - interval 6 day,98);
insert into date_timeframe_example values (now() - interval 1 year - interval 2 day,4);
insert into date_timeframe_example values (now() - interval 3 day,8);
insert into date_timeframe_example values (now() - interval 4 day,21);
insert into date_timeframe_example values (now() - interval 5 day,67);
insert into date_timeframe_example values (now() - interval 6 day,73);
insert into date_timeframe_example values (now() - interval 7 day,67);
insert into date_timeframe_example values (now() - interval 12 day,4);
insert into date_timeframe_example values (now() - interval 4 day,9);
insert into date_timeframe_example values (now() - interval 5 week,124);
insert into date_timeframe_example values (now() - interval 12 week,42);
insert into date_timeframe_example values (now() - interval 6 week,9);
insert into date_timeframe_example values (now() - interval 2 week,7);
select
sum(case when year(myDate) = 2012 and month(myDate) = 1 then sales else 0 end) as month_to_date,
sum(case when year(myDate) = 2011 and month(myDate) = 1 then sales else 0 end) as last_year_month_to_date,
sum(case when year(myDate) = 2012 then sales else 0 end) as year_to_date,
sum(case when year(myDate) = 2011 then sales else 0 end) as last_year_to_date
from date_timeframe_example;
关于php - 是否可以在单个查询中选择 MonthToDate、LastYearMonthToDate、YearToDate 和 LastYearToDate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814301/