我有三张桌子。
$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
来自order
和order_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月时,它没有显示订单表中的数据。
如果需要在这两个表格中应用日期范围,如何从两个表格order
和order_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
答案 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);