如何使用最高user_id离开连接选择值

时间:2015-03-02 20:40:33

标签: php mysql join

这个问题与我上一个问题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
请帮忙。提前谢谢

1 个答案:

答案 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