关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

时间:2021-07-27 09:48:50
关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

期望结果如上,想输出红色框内的两条记录,即同一编号下最后一次更新的两条记录

第一次使用distinct尝试如下,但失败,因为distinct daima对于“最后更新时间”这段代码无效
关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

$result=mysql_query("SELECT distinct daima, id FROM db WHERE id='$id'");
while($row=mysql_fetch_array($result)){
echo $row["case_id"]."<br />";
}

$result=mysql_query("SELECT distinct daima, id, start_time FROM db WHERE id='$id'");
while($row=mysql_fetch_array($result)){
echo $row["start_time"]."<br />";
}


第二次使用SELECT * FROM db WHERE id='$id' ORDER BY start_time DESC LIMIT 1
但还是失败,因为两段代码都共享相同的id字段,就只出现了一条结果
关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

第三次使用group by daima,结果出来了两条,但更新的时间不对...
关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

实在没有办法了,特详细描述问题求助于各位达人~谢谢先

15 个解决方案

#1


select bh,max(sj) from tt group by bh  

#2



select bh,max(UNIX_TIMESTAMP(sj)) from tt group by bh  

#3


回dzxccsu达人,我明白您的意思
但这样处理也有问题

因为sj(在我这里既start_time)是echo的内容
如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

max(daima)也是同样问题

#4


引用 3 楼 binarymann 的回复:
回dzxccsu达人,我明白您的意思
 但这样处理也有问题

 因为sj(在我这里既start_time)是echo的内容
 如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

 max(daima)也是同样问题
怎么会空白呢?

#5


你选择出来的结果是什么呢?

#6


我也不清楚,反正将max(UNIX_TIMESTAMP(start_time))用了后,“最后更新”栏里面就无所输出值了

我怀疑是因为max(start_time) 后就没有从数据库抓出start_time这个字段的值得原因,因此我在max(UNIX_TIMESTAMP(start_time))之前也加入了个start_time

即SELECT max(UNIX_TIMESTAMP(start_time)), start_time
这样一来就有值出现在“最后更新”了,但输出的效果还是我正文最后一贴得效果..

#7


把执行的结果贴出来看看!

#8


关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题
就是这样的

#9


我又想了个办法,将编号作为副键,新增了字段名为cid的自动increament的主键

$result=mysql_query("SELECT max(cid), id, daima, start_time FROM db WHERE id='$id' GROUP BY daima");

但是max(cid)好像没有起到作用,因为输出结果还是我主帖的最后一个图...

#10



--测试代码
use
SQL_Test
go
create table ttime(
  bh varchar(200) not null,
  sj datetime
)
insert into ttime 
select '2009111601','2009-11-16 15:01:46'
union all     
select '2009111601','2009-11-16 15:02:46'
union all     
select '2009111601','2009-11-16 15:03:46'
union all     
select '2009111601','2009-11-16 15:04:46'
union all     
select '2009111602','2009-11-16 15:05:46'
union all     
select '2009111602','2009-11-16 15:07:46'
--查询
select bh,max(sj) from ttime group by bh
--结果
2009111601 2009-11-16 15:04:46.000
2009111602 2009-11-16 15:07:46.000


#11


首先请荣我感谢dzxccsu达人的乐意助人精神,太感动了,还建立了表测试...
但是我照着您的例子也做了个一抹一样的测试,居然还是不出时间字段的值...彻底崩溃


<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["bh"]."<br />";
}
?>

<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]."<br />";
}
?>

关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

#12



$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_row($result)){
echo $row[1]." <br />"; 
试试

#13


果然行了!!!
太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?

#14


引用 13 楼 binarymann 的回复:
果然行了!!!
 太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?


$result=mysql_query("SELECT bh, max(sj) as sj FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]." <br />";

这样也行

#15


果然果然!!!
叩谢dzxccsu达人!

#1


select bh,max(sj) from tt group by bh  

#2



select bh,max(UNIX_TIMESTAMP(sj)) from tt group by bh  

#3


回dzxccsu达人,我明白您的意思
但这样处理也有问题

因为sj(在我这里既start_time)是echo的内容
如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

max(daima)也是同样问题

#4


引用 3 楼 binarymann 的回复:
回dzxccsu达人,我明白您的意思
 但这样处理也有问题

 因为sj(在我这里既start_time)是echo的内容
 如果用了max(start_time)那“最后更新”那一栏就会echo空白,无内容

 max(daima)也是同样问题
怎么会空白呢?

#5


你选择出来的结果是什么呢?

#6


我也不清楚,反正将max(UNIX_TIMESTAMP(start_time))用了后,“最后更新”栏里面就无所输出值了

我怀疑是因为max(start_time) 后就没有从数据库抓出start_time这个字段的值得原因,因此我在max(UNIX_TIMESTAMP(start_time))之前也加入了个start_time

即SELECT max(UNIX_TIMESTAMP(start_time)), start_time
这样一来就有值出现在“最后更新”了,但输出的效果还是我正文最后一贴得效果..

#7


把执行的结果贴出来看看!

#8


关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题
就是这样的

#9


我又想了个办法,将编号作为副键,新增了字段名为cid的自动increament的主键

$result=mysql_query("SELECT max(cid), id, daima, start_time FROM db WHERE id='$id' GROUP BY daima");

但是max(cid)好像没有起到作用,因为输出结果还是我主帖的最后一个图...

#10



--测试代码
use
SQL_Test
go
create table ttime(
  bh varchar(200) not null,
  sj datetime
)
insert into ttime 
select '2009111601','2009-11-16 15:01:46'
union all     
select '2009111601','2009-11-16 15:02:46'
union all     
select '2009111601','2009-11-16 15:03:46'
union all     
select '2009111601','2009-11-16 15:04:46'
union all     
select '2009111602','2009-11-16 15:05:46'
union all     
select '2009111602','2009-11-16 15:07:46'
--查询
select bh,max(sj) from ttime group by bh
--结果
2009111601 2009-11-16 15:04:46.000
2009111602 2009-11-16 15:07:46.000


#11


首先请荣我感谢dzxccsu达人的乐意助人精神,太感动了,还建立了表测试...
但是我照着您的例子也做了个一抹一样的测试,居然还是不出时间字段的值...彻底崩溃


<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["bh"]."<br />";
}
?>

<?php
$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]."<br />";
}
?>

关于MySQL语句LIMIT 1和DISTINCT、Group by的使用问题

#12



$result=mysql_query("SELECT bh, max(sj) FROM ttime GROUP BY bh");
while($row=mysql_fetch_row($result)){
echo $row[1]." <br />"; 
试试

#13


果然行了!!!
太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?

#14


引用 13 楼 binarymann 的回复:
果然行了!!!
 太神奇了,究竟是什么原因呢?以前echo['关键字']都可以的,为何这次必须用1呢?


$result=mysql_query("SELECT bh, max(sj) as sj FROM ttime GROUP BY bh");
while($row=mysql_fetch_array($result)){
echo $row["sj"]." <br />";

这样也行

#15


果然果然!!!
叩谢dzxccsu达人!