client_id pet_id clinic_id invoice_date total service unqid
20.20003 20.26777 20 1/24/2015 100 1 1
20.20001 20.26355 20 1/11/2015 50 2 2
20.20001 20.26355 20 1/12/2015 200 4
20.20001 20.26355 20 1/13/2015 600 5
20.20003 20.26777 20 1/15/2015 350 6
从上面的表格中,我正在尝试进行一个SQL查询,它会给我一个'总计'第一个(最低)' invoice_date'按' pet_id'分组。
使用此功能,我可以获得第一张发票的平均值。问题是我不能让这个工作。
我试过了:
mysql_query("SELECT total FROM invoice WHERE clinic_id='$clinic_id' GROUP BY pet_id ORDER BY invoice_date ASC");
但是这给了我50分,100分 它应该是50和350(Unqid 2和6)。
我将如何做到这一点?另外,为什么我的查询不起作用?我以为它会给我一个按pet_id分组的总数(确保我每张宠物只能获得1张发票)并按最低invoice_date排序(确保它是第一个)。
答案 0 :(得分:0)
SELECT total
FROM
(SELECT * from total order by invoice_date ASC) as invoice
WHERE clinic_id='$clinic_id'
GROUP BY pet_id
答案 1 :(得分:0)
如草莓所述,这种语法是一种解决方法。当您使用 GROUP BY 条件时,您的选择应始终使用聚合方法。
目前,andrei.mihail.nicolae提出的语法有效,但你不知道多长时间。
我建议使用聚合方法解决这个问题:
select a.*
from invoice as a
,(
select pet_id, min(invoice_date) as invoice_date
from invoice
group by pet_id
) as b
where a.pet_id = b.pet_id
and a.invoice_date = b.invoice_date