我有一张桌子:发票
inv_id cus_id due_amt paid total_due
1 71 300 0 300
2 71 200 0 500
3 71 NULL 125 375
4 72 50 0 50
5 72 150 0 200
我想要结果
cus_id total_due
71 375
72 200
我想要total_due
unique
的{{1}}或其他可以说我需要customer
的{{1}}个详细信息。
我尝试了什么:
latest invoice
但这并没有给出所需的结果。
请有人帮助我..
答案 0 :(得分:4)
尝试此查询:
SELECT `cus_id` as CustId, (SELECT `total_due` FROM invoice WHERE cus_id = CustId ORDER BY `inv_id` DESC LIMIT 1) as total_due FROM invoice GROUP BY cus_id
答案 1 :(得分:3)
创建子查询以获取客户的最近total_due
SELECT cus_id, (select total_due from invoice where inv_id=max(a.inv_id)) as total_due FROM invoice a GROUP BY cus_id ORDER BY inv_id DESC
答案 2 :(得分:2)
尝试此示例查询
SELECT i1.cus_id,i1.total_due FROM invoice as i1
LEFT JOIN invoice AS i2 ON i1.cus_id=i2.cus_id AND i1.inv_id<i2.inv_id
WHERE i2.inv_id IS NULL
答案 3 :(得分:1)
只需根据cus_id
组和inv_id
的降序给出一个行号。然后选择行号为1的行。
<强>查询强>
select t1.cus_id, t1.total_due from (
select cus_id, total_due, (
case cus_id when @a
then @b := @b + 1
else @b := 1 and @a := cus_id end
) as rn
from your_table_name t,
(select @b := 0, @a := '') r
order by cus_id, inv_id desc
) t1
where t1.rn = 1
order by t1.cus_id;
<强> Find a demo here 强>
答案 4 :(得分:0)
查询:
SELECT cus_id, total_due FROM invoice GROUP BY cus_id ORDER BY inv_id DESC
由于total_due
子句中的SELECT
列,是无效的SQL。
允许在GROUP BY
子句中包含SELECT
的查询:
GROUP BY
子句中; GROUP BY
子句中存在的列的列。表达式total_due
不属于上述情况。
在5.7.5版本之前,MySQL曾经接受过这样的无效查询。但是,服务器可以return indeterminate values for the invalid expressions免费使用。从版本5.7.5开始,MySQL拒绝这样的查询(其他RDBMS很久以前拒绝它们了......)。
因为GROUP BY
查询不从表中返回行。它创建它返回的行。对于它放在结果集中的每一行,它使用表中的一组行。组中的所有行对于GROUP BY
子句中存在的表达式具有相同的值,但它们可能在SELECT
子句中出现的其他表达式中具有不同的值。
我之前在StackOverflow上多次回答过这个问题。请查看this answer,this answer,this answer或this answer,并将您从中学到的内容应用于您的查询。