使用此查询
SELECT ROUND(COALESCE(SUM(IF(DATE(o.date_purchased) = current_date, ot.value, null)), 0), 2) AS today
FROM orders o
JOIN orders_total ot on ot.orders_id = o.orders_id
WHERE ot.class = 'ot_total'
我获得了当天的销售额。
“date_purchased”列的日期时间为类型。
我如何计算当天的订单或我是否需要第二次查询? 我怎么能将销售分组为2小时。
e.g。 从00:00 - 02:00 0销售0美元 从02:00 - 04:00 3销售148,95美元
等等。
答案 0 :(得分:2)
这很简单,可以非常有效地完成。
要获取当天的订单和销售总额,请执行以下操作:
SELECT DATE(o.date_purchased) AS date_purchased,
SUM(ot.value) AS sales_today,
COUNT(*) AS orders_today
FROM orders AS o
JOIN orders_total AS ot ON ot.orders_id = o.orders_id
WHERE ot.class = 'ot_total'
AND o.date_purchased >= CURRENT_DATE()
AND o.date_purchased < CURRENT_DATE() + INTERVAL 1 DAY
GROUP BY DATE(ot.value)
注意:我不明白你的订单和orders_total表所以我猜了一下。
要报告一小时的间隔,请查看上面的查询(使用GROUP BY),然后替换
DATE(ot.value) + INTERVAL HOUR(ot.value) HOUR
表示发生DATE(ot.value)
的两个地方。该表达式获取每个时间戳并将其转换为最近一小时的时间戳。例如,它会将2014-01-01 11:15:22
变为2014-01-01 11:00
。按照该值进行分组时,您可以获得所需的内容。
您要做的是报告两小时的间隔。要做到这一点,你需要一个表达式,它接受每个时间戳并将其转换为最近两小时间隔的时间戳。例如,您需要将2014-01-01 11:15:22
变为2014-01-01 10:00
。所以,我们需要提出一个表达式来做到这一点。这里是。这是一个约会算术魔术。
DATE(ot.value) + INTERVAL (HOUR(ot.value) - HOUR(ot.value) MOD 2) HOUR
因此,您的两小时摘要查询如下所示。
SELECT DATE(o.date_purchased)
+ INTERVAL (HOUR(o.date_purchased)
- HOUR(o.date_purchased) MOD 2) HOUR AS time_purchased,
SUM(ot.value) AS sales_today,
COUNT(*) AS orders_today
FROM orders AS o
JOIN orders_total AS ot ON ot.orders_id = o.orders_id
WHERE ot.class = 'ot_total'
AND o.date_purchased >= CURRENT_DATE()
AND o.date_purchased < CURRENT_DATE() + INTERVAL 1 DAY
GROUP BY DATE(o.date_purchased)
+ INTERVAL (HOUR(o.date_purchased)
- HOUR(o.date_purchased) MOD 2) HOUR
有关如何更一般地执行此时间间隔报告的说明,请参阅此处。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/这种SQL看起来有点令人困惑,但它遵循简单的代码模式。