使用PHP仅显示MySQL数据库中每行的最新记录

时间:2013-02-04 14:14:51

标签: php mysql sql greatest-n-per-group

我有两个表,其中一个每天更新。我想展示"只有"每一行的最新记录。

这是我现在使用的查询,当然会返回所有记录。

SELECT * 
FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id 
ORDER BY id ASC

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

您可以使用子查询找到segment_id的{​​{1}}的最新记录。然后,子查询的结果将与两个表联接:IDss_pumps

secondary_systems

实际上,我不确定你的表:SELECT a.*, c.* FROM ss_pumps a INNER JOIN ( SELECT segment_id, MAX(datefield) max_val FROM secondary_systems GROUP BY segment_id )b ON a.id = b.segment_id INNER JOIN secondary_systems c ON b.segment_id = c.segment_id AND b.max_val = c.datefield ss_pumps是如何相互关联的。

我认为你想要其他方式,

secondary_systems

答案 1 :(得分:1)

使用此查询:

SELECT * FROM ss_pumps, secondary_systems WHERE ss_pumps.id=secondary_systems.segment_id ORDER BY id DESC LIMIT 1

这假设id是一个自动增量列,并且将始终按顺序插入。

答案 2 :(得分:-2)

这是我得到的:

SELECT * 
FROM
    ss_pumps ssp
    LEFT JOIN ( SELECT * FROM secondary_systems ORDER BY id DESC ) ss ON ( ssp.id = ss.segment_id )
GROUP BY
    ssp.id
ORDER BY
    ssp.id ASC
  

CAVEAT:我假设secondary_systems有自己的id字段也会自动增量。这是确保您“仅”获得每行的最新记录的唯一方法。


演示: http://sqlfiddle.com/#!2/f816b/2/0

在我的演示中ss_pumps举行了父母,而secondary_systems抓住了孩子们。每位家长有3个孩子。除了最后一个孩子都是男孩。最后一个孩子永远是个女孩。根据您的问题,生成的查询应该只产生女孩。

| ID | PARENT | SEGMENT_ID | CHILD |
------------------------------------
|  1 | mother |          1 | betty |
|  2 | father |          2 |  tina |