php - 是否可以在单个查询中选择 MonthToDate、LastYearMonthToDate、YearToDate 和 LastYearToDate?

标签 php mysql optimization

我试图在单个查询中选择以下数据:我有一个标准 mySQL 格式的日期变量,它允许 mySQL 选择语句,例如 YEAR(date) = '2011'MONTH(date) = '11' 选择 2011 年 11 月的所有数据。

我正在尝试SUM 四个不同时间范围内名为 sales 的变量:月至今、去年月至今、年至今和去年至今。

请假设我事先定义了这三个变量。 $currentYear$lastYear$currentMonth

我想尝试减少数据库的负载,看看是否可以在单个查询中选择它。

提前致谢!

最佳答案

您可以将 SUMCASE 技巧结合使用。它让我摆脱了过去的许多分析漏洞!

下面是一个底部有查询的示例。我不是 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/

相关文章:

mysql - 避免在 MySQL 中对两个几乎相同的表使用 UNION

php - 使用 PHPTAL 进行斑马条纹?

php - Javascript 和 PHP 数组值

php - 如何编写mysql查询?

php - 上传多张图片如何存储

matlab - MATLAB 是否执行公共(public)子表达式消除?

mysql - 使用 OPTIMIZE 对 Mariadb 表进行碎片整理

PHP MySQL 多语言网站

php - 使用 MySQL 对列的逗号分隔字符串进行排序

php - 如何在android studio上使用webview获取json请求?