如何在PHP MySQL中获取重复列的最后一行

3

我有一个表格如下。我想用php运行查询来选择表格中的数据,如果日期列重复,则只取该日期的最后一行。

id     Date          start   end    publish
1   04-Nov-2015     1000    1300    0
4   04-Nov-2015     2100    3500    0
5   05-Nov-2015     1500    3000    0

例如下面的表格,当我运行查询时应该得到以下结果:

4   04-Nov-2015     2100    3500    0
5   05-Nov-2015     1500    3000    0

当我运行查询时

$select = mysql_query("select * from `entry` Group by `date`") or die(mysql_error());

那么它将显示重复表的第一行,我应该在查询中修改什么以便结果显示重复列的最后一行。


你说的最后一行是指哪一行?它是根据什么条件确定的? - GolezTrol
1
如果id是自动递增的,您可以使用Select * from (Select * from entry order by date,id desc) x group by x.date。 - undefined_variable
谢谢 @Undefined_variable,它解决了问题。 - Rohitashv Singhal
@RohitashvSinghal 请接受答案,这样问题就会关闭。 - undefined_variable
请注意,您正在使用的旧版mysql_*扩展在PHP 5.5版本(当前版本)中已被弃用,并将在版本7(下一个版本)中被删除。您需要迁移到使用mysqli_*扩展或PDO。 - SpacePhoenix
5个回答

2
Select * from (Select * from entry order by date,id desc) x group by x.date

0

尝试这个查询:

select * from( select * from entry order by id DESC ) new Group by date

它也会给出第一行。 - Rohitashv Singhal
选择 * 从( 选择 * 从 entry 按 id DESC 排序 ) new 按 date 分组 - Abhishek Sharma
请尝试执行此查询 @RohitashvSinghal - Abhishek Sharma

0
你可以使用以下方法来实现这个功能:
$select = mysql_query("select * from `entry` Group by `date`" ORDER BY id DESC LIMIT 1) or die(mysql_error());

0
尝试使用内部查询,我不能确定以下内容是否完全有效,因为我现在无法测试,但是为了获得结果,您必须使用内部查询。内部查询在我的情况下帮助我获得预期的结果。
SELECT *
FROM entry p
WHERE id =
  (SELECT max(id) FROM entry p2
   WHERE p2.id = p.id)
GROUP BY p.date
ORDER BY p.id DESC;

0

这个查询语句适用于你:

create TABLE test (id INT PRIMARY KEY, tdate DATE, start INT);

SELECT t1.* FROM test as t1
LEFT JOIN test as t2
  ON (t1.tdate = t2.tdate AND t1.id < t2.id)
WHERE t2.id IS NULL;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接