我正在查询我正在搜索订单号的查询。我需要过滤当天唯一的订单号。为此,我在主查询中使用count(distinct order_number)。此查询从前端获取开始日期和结束日期并使用它们。但是我有一个问题,如果在该范围内有2天相同的order_number,它将被计算在两个日期。即 计算一天中唯一订单的数量。最初我想在日期上使用一些循环并对结果求和,但这对我来说并不合适。我更感兴趣的是使用相同的查询并根据日期修改不同的订单。这是我的疑问:
SELECT 'site1' AS site,
DATE_FORMAT(l.login_time, '%m/%d/%Y') AS DATE,
COUNT(DISTINCT osh.order_num) AS total_orders
FROM order_history o
INNER JOIN logs l ON o.userID = l.id
WHERE o.date_time BETWEEN 1380524400 AND 1380610799
AND l.LOGIN BETWEEN FROM_UNIXTIME(1380524400) AND FROM_UNIXTIME(1380610799)
GROUP BY DATE
示例
假设日期29Aug,我有订单o1,o2,o1,o3,o2我将它们计为3个不同的订单,即o1,o2,03 8月30日,我有订单o1,o4,o4,o1我将它们视为2个不同的订单,即o1,o4
但是当我查询29-30时,我必须得到3 + 2 = 5的计数,即o1在sicne范围内计算两次,它属于两个差异日期。
答案 0 :(得分:2)
我认为在这种情况下,WITH ROLLUP
修饰符可能会服务于您的目的
SELECT 'site1' AS site,
DATE_FORMAT(l.login_time, '%m/%d/%Y') AS `DATE`,
COUNT(DISTINCT osh.order_num) AS total_orders
FROM order_history o
INNER JOIN logs l ON o.userID = l.id
WHERE o.date_time BETWEEN 1380524400 AND 1380610799
AND l.LOGIN BETWEEN FROM_UNIXTIME(1380524400) AND FROM_UNIXTIME(1380610799)
GROUP BY `DATE` WITH ROLLUP
这将在数据末尾添加一个额外的行,该行将total_orders
数据相加(DATE
的值为NULL)
以下是有关此修饰符的文档:http://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html