数据库:zhcxkj_center_order
查询时间:18.9806
扫描行数:100515
发送行数:1
指纹SQL: with tmp_monitor_sale as ( select ? msku , ? source_id ) SELECT sale . msku , sale . source_id , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? DAY ) , ? ) AS UNSIGNED ) ) THEN quantity_ordered ELSE ? END ) ? , sum ( CASE WHEN ( purchase_date_day >= cast ( DATE_FORMAT ( DATE_ADD ( CURDATE ( ) , INTERVAL - ? - ? DAY ) , ? ) AS UNSIGNED ) AND purchase_date_day <= cast ( DATE_FORMAT ( DATE_ADD ( CURD
真实SQL:with tmp_monitor_sale as ( select ZY-LQCL-IOLA msku, 12881 source_id ) SELECT sale.msku, sale.source_id, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 6 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum7, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 13 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum14, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 27 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum28, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 30 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum30, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 59 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum60, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 89 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum90, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 119 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum120, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 179 - 2 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) saleNum180, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 6 - 2 - 364 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) yoySaleNum7, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 13 - 2 - 364 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) yoySaleNum14, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 29 - 2 - 364 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) yoySaleNum30, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 59 - 2 - 364 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) yoySaleNum60, sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 89 - 2 - 364 DAY ), %Y%m%d ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),%Y%m%d ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) yoySaleNum90 FROM t_amazon_sales_2 sale inner join tmp_monitor_sale tmp on sale.source_id = tmp.source_id and sale.msku = tmp.msku where sale.purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 364 - 2 - 365 DAY ), %Y%m%d ) AS UNSIGNED ) AND sale.order_status IN ( 1, 2, 3, 4 ) GROUP BY msku, source_id;
无人工修改
AISQL修改建议:WITH tmp_monitor_sale AS (SELECT ZY-LQCL-IOLA msku, 12881 source_id),
date_ranges AS (
SELECT
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -6-2 DAY), %Y%m%d) AS UNSIGNED) AS range7_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -2 DAY), %Y%m%d) AS UNSIGNED) AS range_end,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -13-2 DAY), %Y%m%d) AS UNSIGNED) AS range14_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -27-2 DAY), %Y%m%d) AS UNSIGNED) AS range28_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -30-2 DAY), %Y%m%d) AS UNSIGNED) AS range30_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -59-2 DAY), %Y%m%d) AS UNSIGNED) AS range60_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -89-2 DAY), %Y%m%d) AS UNSIGNED) AS range90_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -119-2 DAY), %Y%m%d) AS UNSIGNED) AS range120_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -179-2 DAY), %Y%m%d) AS UNSIGNED) AS range180_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -6-2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range7_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range_end,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -13-2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range14_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -29-2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range30_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -59-2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range60_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -89-2-364 DAY), %Y%m%d) AS UNSIGNED) AS yoy_range90_start,
CAST(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -364-2-365 DAY), %Y%m%d) AS UNSIGNED) AS min_date
)
SELECT
sale.msku,
sale.source_id,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range7_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum7,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range14_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum14,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range28_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum28,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range30_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum30,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range60_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum60,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range90_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum90,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range120_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum120,
SUM(CASE WHEN purchase_date_day BETWEEN dr.range180_start AND dr.range_end THEN quantity_ordered ELSE 0 END) AS saleNum180,
SUM(CASE WHEN purchase_date_day BETWEEN dr.yoy_range7_start AND dr.yoy_range_end THEN quantity_ordered ELSE 0 END) AS yoySaleNum7,
SUM(CASE WHEN purchase_date_day BETWEEN dr.yoy_range14_start AND dr.yoy_range_end THEN quantity_ordered ELSE 0 END) AS yoySaleNum14,
SUM(CASE WHEN purchase_date_day BETWEEN dr.yoy_range30_start AND dr.yoy_range_end THEN quantity_ordered ELSE 0 END) AS yoySaleNum30,
SUM(CASE WHEN purchase_date_day BETWEEN dr.yoy_range60_start AND dr.yoy_range_end THEN quantity_ordered ELSE 0 END) AS yoySaleNum60,
SUM(CASE WHEN purchase_date_day BETWEEN dr.yoy_range90_start AND dr.yoy_range_end THEN quantity_ordered ELSE 0 END) AS yoySaleNum90
FROM t_amazon_sales_2 sale
INNER JOIN tmp_monitor_sale tmp ON sale.source_id = tmp.source_id AND sale.msku = tmp.msku
CROSS JOIN date_ranges dr
WHERE sale.purchase_date_day >= dr.min_date
AND sale.order_status IN (1, 2, 3, 4)
GROUP BY msku, source_id;
explain表:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | PRIMARY | <derived2> | None | system | None | None | None | None | 1 | 100.0 | None |
| 1 | PRIMARY | sale | None | ref | idx_source_id_msku,idx_purchase_date_day,idx_source_id_purchase_date_beijing_msku,idx_source_id_country_code_purchase_date_asin | idx_source_id_msku | 518 | const,const | 38234 | 20.0 | Using index condition; Using where |
| 2 | DERIVED | None | None | None | None | None | None | None | None | None | No tables used |
额外建议:
索引建议:join查询分析出错: (1146, "Table zhcxkj_center_order.tmp doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_order.tmp doesnt exist")
取出表 【t_amazon_sales_2】 where条件表达式 【order_status IN (1, 2, 3, 4)】 100000 条记录,重复的数据有:【98579】 条,没有必要为该字段创建索引。
→ 【t_amazon_sales_2】表 【purchase_date_day】字段,索引已经存在,无需添加任何索引。
【t_amazon_sales_2】表 【purchase_date_day】字段,索引分析:
+------------------+-----------------------+-------------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+==================+=======================+===================+===============+
| t_amazon_sales_2 | idx_purchase_date_day | purchase_date_day | 25125 |
+------------------+-----------------------+-------------------+---------------+
无需优化