从另一条记录分组的表中获取第一条记录 - PHP,MYSQL

时间:2015-01-28 17:31:40

标签: php mysql

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排序(确保它是第一个)。

2 个答案:

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