MySQL SUM按月,年份分组,日期范围从两个表开始

时间:2014-11-04 09:28:39

标签: php mysql

我有三张桌子。

$sql1="SELECT * FROM user"; //PK user_id
$sql2="SELECT * FROM order";   //PK order_id , (order_user_id = user_id)        
$sql3="SELECT * FROM order_old"; //same content as `order` table

我需要SUM(order_amount) AS TOTAL_ORDER来自orderorder_old表格,并按月和年份将它们与日期范围条件相关联。通常上个月的前两周仍在order表中。

当order_old上的记录和具有相同月份和年份的订单时,我需要汇总金额。 如果我使用UNION,它会很好地检索数据,但会有一个双月,准备好求和的值变成一个。

 $SQL="SELECT a.user_name, Sum(sum(b.order_amount)-sum(b.discount) + 
sum(c.order_amount)-sum(c.discount)) AS total_order, DATE_FORMAT(b.order_date,'%Y-%m') AS time 
FROM USER a INNER JOIN order_old b ON ( a.user_id = b.order_user_id ) 
INNER JOIN order c ON ( a.user_id = c.order_user_id ) 
WHERE a.user_id <> '' AND b.order_date BETWEEN '2014-09-01' AND '2014-11-31'
AND a.user_name LIKE 'JOHN%' 
AND c.order_date BETWEEN '2014-01-1' AND '2014-11-31'
 GROUP BY DATE_FORMAT(b.to_in_date,'%Y-%m') ASC"`

从上面的SQL中,我设法获得了值,但是当查询条件是2014年1月到2014年11月时,它没有显示订单表中的数据。  如果需要在这两个表格中应用日期范围,如何从两个表格orderorder_old中选择数据?

USER

  user_id user_name
   --       ----------
   001        JOHN
   002        ADAM       

ORDER

  order_id order_user_id     order_amount     order_date         discount
   --       ----------       ----------        ----------        --------- 
   6       001               100             01/11/2014 10:55     50
   7       002               100             01/11/2014 10:55     20
   8       001                50             25/10/2014 10:55      0
   9       001               100             23/10/2014 11:00      0
  10       002                50             21/10/2014 11:00      0

ORDER_OLD

  order_id order_user_id     order_amount     order_date         discount
   --       ----------       ----------        ----------        --------- 
   1        001               100             15/10/2014 10:55      50
   2        002               100             11/10/2014 10:55      20
   3        001               50              11/10/2014 10:55       0
   4        001               100             21/09/2014 11:00       0
   5        002               50              21/09/2014 11:00       0

预期结果:

 No     user_name          Total Order     Time
 --       ----------       ----------      ---------       
 1        John               100            2014-09
 2        John               250            2014-10
 3        John                50            2014-11

1 个答案:

答案 0 :(得分:0)

试试这个: -

SELECT OO.ORDER_ID, U.USER_NAME, SUM(OO.ORDER_AMT)-SUM(OO.DISCOUNT) AS TOTAL ORDER, TIME
FROM ORDER_OLD OO, ORDER O, USER U
WHERE OO.ORDER_USER_ID = O.ORDER_USER_ID
AND U.USER_ID = OO.ORDER_USER_ID
AND U.USER_NAME = 'John'
OO.ORDER_DATE BETWEEN '2014-09-01' AND '2014-11-31' 
GROUP BY OO.ORDER_ID, U.USER_NAME, MONTH(ORDER_DATE);