我依靠一个请求,我阻止在30天后添加约束。我可以恢复去年订单的销售,但我想再加上30天。
这是我的要求:
SELECT SUM(total_paid)/COUNT(id_order)
FROM ps_orders o
WHERE o.date_add BETWEEN DATE_FORMAT(
CASE
WHEN YEAR( DATE_SUB( now(), INTERVAL 364 DAY ) ) = YEAR(now() )
THEN DATE_SUB(concat(YEAR(now()),'-',MONTH(now()),'-01'), INTERVAL 371 DAY)
ELSE DATE_SUB(concat(YEAR(now()),'-',MONTH(now()),'-01'), INTERVAL 364 DAY) END, '%Y/%m/%d') AND
CASE
WHEN YEAR( DATE_SUB( now(), INTERVAL 364 DAY ) ) = YEAR(now() )
THEN DATE_SUB(now(), INTERVAL 371 DAY)
ELSE DATE_SUB(now(), INTERVAL 364 DAY) END
AND valid=1
30天
SELECT SUM(total_paid)/COUNT(id_order)
FROM '._DB_PREFIX_.'orders o
WHERE o.date_add BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), "%Y/%m/%d") AND NOW()
AND o.valid=1
必须按照total_paid
和id_order
的营业额退还给我。
谢谢您的帮助。
答案 0 :(得分:0)
我认为根据今天的日期,您可能希望从去年开始连续30天。您可以使用此函数使用date_sub两次,以获取下边界。例如,我有一个名为date的表,其中包含2000年以来的所有日期。
SELECT DTE, date_sub(date_sub(date(now()), interval 1 year), interval 30 day) lastyrplus30,
date_sub(date(now()), interval 1 year) lastyr
from dates
where dte between date_sub(date_sub(date(now()), interval 1 year), interval 30 day) and
date_sub(date(now()), interval 1 year)
;
产生
+------------+--------------+------------+
| DTE | lastyrplus30 | lastyr |
+------------+--------------+------------+
| 2018-07-06 | 2018-07-06 | 2018-08-05 |
| 2018-07-07 | 2018-07-06 | 2018-08-05 |
| 2018-07-08 | 2018-07-06 | 2018-08-05 |
| 2018-07-09 | 2018-07-06 | 2018-08-05 |
| 2018-07-10 | 2018-07-06 | 2018-08-05 |
| 2018-07-11 | 2018-07-06 | 2018-08-05 |
| 2018-07-12 | 2018-07-06 | 2018-08-05 |
| 2018-07-13 | 2018-07-06 | 2018-08-05 |
| 2018-07-14 | 2018-07-06 | 2018-08-05 |
| 2018-07-15 | 2018-07-06 | 2018-08-05 |
| 2018-07-16 | 2018-07-06 | 2018-08-05 |
| 2018-07-17 | 2018-07-06 | 2018-08-05 |
| 2018-07-18 | 2018-07-06 | 2018-08-05 |
| 2018-07-19 | 2018-07-06 | 2018-08-05 |
| 2018-07-20 | 2018-07-06 | 2018-08-05 |
| 2018-07-21 | 2018-07-06 | 2018-08-05 |
| 2018-07-22 | 2018-07-06 | 2018-08-05 |
| 2018-07-23 | 2018-07-06 | 2018-08-05 |
| 2018-07-24 | 2018-07-06 | 2018-08-05 |
| 2018-07-25 | 2018-07-06 | 2018-08-05 |
| 2018-07-26 | 2018-07-06 | 2018-08-05 |
| 2018-07-27 | 2018-07-06 | 2018-08-05 |
| 2018-07-28 | 2018-07-06 | 2018-08-05 |
| 2018-07-29 | 2018-07-06 | 2018-08-05 |
| 2018-07-30 | 2018-07-06 | 2018-08-05 |
| 2018-07-31 | 2018-07-06 | 2018-08-05 |
| 2018-08-01 | 2018-07-06 | 2018-08-05 |
| 2018-08-02 | 2018-07-06 | 2018-08-05 |
| 2018-08-03 | 2018-07-06 | 2018-08-05 |
| 2018-08-04 | 2018-07-06 | 2018-08-05 |
| 2018-08-05 | 2018-07-06 | 2018-08-05 |
+------------+--------------+------------+
31 rows in set (0.01 sec)
如果要进一步测试,并且有日期或日历表之类的内容,则可以用用户定义的变量替换now()。例如
set @now = '2019-05-20';
SELECT DTE, date_sub(date_sub(date(@now), interval 1 year), interval 30 day) lastyrplus30,
date_sub(date(@now), interval 1 year) lastyr
from dates
where dte between date_sub(date_sub(date(@now), interval 1 year), interval 30 day) and
date_sub(date(@now), interval 1 year) ;
结果
+------------+--------------+------------+
| DTE | lastyrplus30 | lastyr |
+------------+--------------+------------+
| 2018-04-20 | 2018-04-20 | 2018-05-20 |
| 2018-04-21 | 2018-04-20 | 2018-05-20 |
| 2018-04-22 | 2018-04-20 | 2018-05-20 |
| 2018-04-23 | 2018-04-20 | 2018-05-20 |
| 2018-04-24 | 2018-04-20 | 2018-05-20 |
| 2018-04-25 | 2018-04-20 | 2018-05-20 |
| 2018-04-26 | 2018-04-20 | 2018-05-20 |
| 2018-04-27 | 2018-04-20 | 2018-05-20 |
| 2018-04-28 | 2018-04-20 | 2018-05-20 |
| 2018-04-29 | 2018-04-20 | 2018-05-20 |
| 2018-04-30 | 2018-04-20 | 2018-05-20 |
| 2018-05-01 | 2018-04-20 | 2018-05-20 |
| 2018-05-02 | 2018-04-20 | 2018-05-20 |
| 2018-05-03 | 2018-04-20 | 2018-05-20 |
| 2018-05-04 | 2018-04-20 | 2018-05-20 |
| 2018-05-05 | 2018-04-20 | 2018-05-20 |
| 2018-05-06 | 2018-04-20 | 2018-05-20 |
| 2018-05-07 | 2018-04-20 | 2018-05-20 |
| 2018-05-08 | 2018-04-20 | 2018-05-20 |
| 2018-05-09 | 2018-04-20 | 2018-05-20 |
| 2018-05-10 | 2018-04-20 | 2018-05-20 |
| 2018-05-11 | 2018-04-20 | 2018-05-20 |
| 2018-05-12 | 2018-04-20 | 2018-05-20 |
| 2018-05-13 | 2018-04-20 | 2018-05-20 |
| 2018-05-14 | 2018-04-20 | 2018-05-20 |
| 2018-05-15 | 2018-04-20 | 2018-05-20 |
| 2018-05-16 | 2018-04-20 | 2018-05-20 |
| 2018-05-17 | 2018-04-20 | 2018-05-20 |
| 2018-05-18 | 2018-04-20 | 2018-05-20 |
| 2018-05-19 | 2018-04-20 | 2018-05-20 |
| 2018-05-20 | 2018-04-20 | 2018-05-20 |
+------------+--------------+------------+
31 rows in set (0.02 sec)