我不太擅长数据库查询。我需要一些帮助。
我有一个数据库表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'
等等......
所以我想知道有什么方法可以通过执行单个查询来获得这个结果集。
答案 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;