表格: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,并且该stid具有该记录应显示的gpdate。例如,最后一个id的stid 4321是5,它不应该显示记录,stid 1234的最后一个id是6,它具有gpdate,因此该记录应该显示。
我的查询是:
$sql="SELECT * FROM (SELECT stid, MAX(id) AS id FROM gpreport
WHERE gpdate >= CURDATE() GROUP BY stid) AS sid JOIN gpreport USING (stid, id)";
它也显示ID 4为4321。
最佳答案
使用子查询获取最新信息,然后将其与表结合以获取其他详细信息。
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'
除了在子查询中检查日期之外,几乎所有的东西都差不多。
关于mysql - MySQL分组依据和查询顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26930991/