表格: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/

10-11 01:33