Mysql Group by和order by order

时间:2014-11-14 13:22:15

标签: mysql

表:gpreport

id  stid    stname  gpdate  
1   1234    store1  2014-11-16
2   1234    store1  2014-11-15
3   4321    store2  2014-11-17
4   4321    store2  2014-11-17
5   4321    store2  0000-00-00
6   1234    store1  2014-11-15

我必须获得stid的最后一个id,而且这个记录应该显示的是gdate。例如,最后一个id的stid 4321是5,它不应该显示记录和stid 1234最后一个id是6并且它有gpdate,所以记录sholuld显示。

我的查询是:

$sql="SELECT * FROM (SELECT stid, MAX(id) AS id FROM gpreport 
WHERE gpdate >= CURDATE() GROUP BY stid) AS sid JOIN gpreport USING (stid, id)";

它也显示了4321的id 4。

1 个答案:

答案 0 :(得分:2)

使用子查询获取最新信息并将其与表格连接以获取其他详细信息。

SELECT a.*
FROM gpreport a
INNER JOIN 
(
    SELECT stid, MAX(id) AS max_id
    FROM gpreport
    GROUP BY stid
) sub0
ON a.stid = sub0.stid
AND a.id = sub0.max_id
WHERE sub0.gpdate> '0000-00-00'

除了在子查询中检查日期之外,这几乎就是你所拥有的。