我想取一份过去30天内按销售数量订购的产品清单。
我将如何使以下查询也按销售数量在过去30天内,并让他们后面的产品,没有销售的东西,在这30天?
我需要那些在过去30天内先有销售,然后是没有任何销售后的产品。
包含销售日期的字段是 datetime
调用的字段 orders.sold_time
这是我当前的查询:
SELECT pd.products_id AS id, pd.products_name AS name
FROM products_description pd
LEFT JOIN products ON pd.products_id = products.products_id
LEFT JOIN orders_products ON pd.products_id = orders_products.products_id
LEFT JOIN orders ON orders_products.orders_id = orders.orders_id
WHERE pd.c5_dataset = 'DAT'
AND products.products_status =1
AND pd.language_id =4
AND NOT EXISTS (
SELECT 1
FROM products_description
WHERE products_id = pd.products_id
AND language_id = 10
)
AND orders_total.class = 'ot_total'
GROUP BY pd.products_id
ORDER BY count( orders_products.products_quantity ) DESC
1条答案
按热度按时间5cg8jx4n1#
你可以使用
case when
表达方式。表示最近30天的销售量的表达式是:你可以把这个放在箱子里
order by
条款,然后你方应决定订购过去30天内没有销售的商品。例如,这可能是所有时间的销售数量。我还会为所有表使用别名(就像第一个表一样)。所以呢
o
为了orders
,op
为了orders_products
.那么你的
order by
看起来像:为了检查结果,最好也将这两个表达式添加到
select
列表。关于sql的一些注解:
因为你有一个非空的条件
products.products_status
(=1)没有充分的理由使用LEFT JOIN products
. 而是使用更有效的INNER JOIN
.如果你更换新的机器,你可能会提高效率
NOT EXISTS
带有INNER JOIN
条款:前提是每个产品和语言最多只能有一个描述。