这个问题与我上一个问题How to left join 2 tables with SUM() and MAX() grouped by date
有关我改变的是我添加了user_id列(自动递增)并且想要选择每个日期具有最高user_id的值
我有表加载历史记录(希望“仅选择每个日期具有最高user_id的值”组和按日期DESC排序。) 所以在这种情况下,我想为2015-02-27选择150,因为它在该日期具有最高的user_id而在2015-02-28有50个
| user_id | customer_id | date | bal |
1 1 2015-02-27 100
2 1 2015-02-27 150
3 1 2015-02-28 150
4 1 2015-02-28 50
和表事务记录(想要使用SUM(bal)组和按日期DESC排序每个日期的值)
| user_id |customer_id | date | bal |
1 1 2015-02-27 50
2 1 2015-02-27 20
3 1 2015-02-28 10
我想加入两个表格,如下所示:
| date | balance | amount paid |
2015-02-28 50 10
2015-02-27 150 70
这是到目前为止的代码(我使用了我之前的问题得到的代码,并在我的新问题中编辑它,希望得到预期的结果,但没有)
SELECT a.customer_id, a.date, (b.bal AS bal WHERE b.user_id = MAX(b.user_id) , a.paid
FROM (
SELECT customer_id, date, SUM(bal) AS paid
FROM transactionrecord
GROUP BY customer_id, date
) AS a LEFT JOIN loadhistory AS b
ON a.customer_id = b.customer_id AND a.date = b.date
WHERE a.customer_id = 1
GROUP BY a.customer_id, a.date, a.paid
ORDER BY a.date DESC
请帮忙。提前谢谢
答案 0 :(得分:0)
MySQL使用 group by 的第一行,因此您必须先订购它,然后才能像这样使用group by:
SELECT * FROM (SELECT * FROM `loadhistory` ORDER BY user_id DESC) history GROUP BY date
因此,您可以使用以下查询作为解决方案:
SELECT h.date,h.bal as balance, t.amount as 'amount paid' FROM
(SELECT * FROM (SELECT * FROM `loadhistory` ORDER BY user_id DESC) history GROUP BY date) as h
JOIN
(SELECT SUM(bal) as amount, customer_id, date FROM `transactionrecord` GROUP BY date) as t
ON h.date = t.date AND h.customer_id = t.customer_id
ORDER BY date DESC