Mysql按1天间隔获取结果

时间:2016-05-23 12:14:21

标签: php mysql sql phpmyadmin

我不太擅长数据库查询。我需要一些帮助。

我有一个数据库表tbl_orders。在此表中,按照GMT存储订购日期时间。

现在,我想显示一个分析,用户将在IST中选择日期范围。我将在帖子中获得。

e.g。用户已选择2016年1月4日至2016年4月30日

现在我想显示每个日期的总订单金额。

但是在GMT中存储的数据库日期时间我需要先将 IST日期转换为GMT日期时间,然后我需要为每个日期执行sql查询。

这意味着如果有30天,那么将执行30个SQL查询。

第一个查询将像

一样执行
SELECT SUM(order_amount) FROM tbl_order WHERE order_date=<'2016-03-31 18:30:00'  
AND orer_date>'2016-04-01 18:30:00'

第二个查询将像

一样执行
SELECT SUM(order_amount) FROM tbl_order WHERE order_date=<'2016-04-01
18:30:00' AND orer_date>'2016-04-02 18:30:00'

等等......

所以我想知道有什么方法可以通过执行单个查询来获得这个结果集。

2 个答案:

答案 0 :(得分:0)

使用条件聚合:

SELECT SUM(CASE WHEN order_date >= '2016-03-31 18:30:00' AND order_date < '2016-04-01 18:30:00'
                THEN order_amount END),
       SUM(CASE WHEN order_date >= '2016-04-01 18:30:00' AND order_date < '2016-04-02 18:30:00'
                THEN order_amount END)
FROM tbl_order; 

注记。表达<=的正确方法是<=。此外,比较的顺序不正确,因此原始值为NULL

答案 1 :(得分:0)

尝试以下代码并检查输出是否符合您的要求(如果您已在PHP中将日期转换为GMT):

SELECT order_date,SUM(order_amount) FROM tbl_order WHERE order_date between   
'2016-03-31 00:00:00' AND '2016-04-30 00:00:00' GROUP BY order_date DESC;

注意:第一个日期应始终小于第二个日期。

IST比GMT早5.30小时,因此,为了将IST时间转换为GMT,您必须从IST时间减去5.30小时,这可以使用以下查询完成(如果您计划在MYSQL中将日期从IST转换为GMT)查询)

SELECT order_date,SUM(order_amount) FROM tbl_order WHERE order_date between   
convert_tz('2016-03-31 00:00:00','+00:00','-05:30') AND
convert_tz('2016-04-30 00:00:00','+00:00','-05:30') GROUP BY order_date DESC;