mysql 查询符合条件的 最后一条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 查询符合条件的 最后一条相关的知识,希望对你有一定的参考价值。

订单表 OID | Content
订单状态记录表 : RID | OID | status | time
状态记录记录了 订单状态变化,那么一个订单的 最后 一条状态记录就是 它的 当前状态。
获取订单的当前状态。How to ?
select oid curstatus from orders ...
我这是两张表啊……
订单状态记录里有 很多订单 的状态的。
比如:
1 23 已提交 2013-8-9
2 25 已提交 2013-8-10
3 23 已确认 2013-8-12
4 25 已拒绝 2013-8-12
5 25 已提交 2013-8-13
表示 订单23 8-9提交,8-12被确认。现在是 已确认 状态。
订单25 8-10提交,08-12被拒绝,8-13又提交了。现在是 已提交 状态。

首先要确定什么是最后一条。
是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。
比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。
SQL如下:
select a,b from table where a>'某个时间' order by a desc limit 1
(上面SQL中a为时间)。
参考技术A select oid curstatus from orders order by oid desc limit 1

select max(oid) curstatus from orders

以上两个方法应该都可行,如果OID是升序的,最后一条其实就是最大一条追问

补充了问题。
状态记录表 记录的并不是 单独的一个 订单。
而是所有订单的状态记录。
要获取的也是 所有 订单的 当前状态……
麻烦你了。

追答

你的表应该有主键吧,用第一个语句的方法,按照主键降序排列,取满足条件的第一条就是了

本回答被提问者和网友采纳
参考技术B 用max(time)查询方可!!
select oid,status,max(time) time from 表名 group by oid,max(time);追问

补充了问题。
没说清楚。
订单状态记录表 记录的并 不是 单独的一个 订单。
麻烦你了。

参考技术C select top 1 * from 表名 where 条件 order by shijian desc追问

补充了问题。
状态记录表 记录的并不是 单独的一个 订单。
而是所有订单的状态记录。

追答

select top 1 * from 订单表,订单状态表 where 订单表.oid = 订单状态表.oid and 订单状态表.status =已提交 order by 订单状态表.time desc

追问

我这是 mysql - -
top 不认识。
而且 top 只会返回 一行吧。
我想要 订单表 里 每个订单的 当前状态。所以行数 肯定是和 订单表总行数 一样的。
单状态表.status =已提交 ,这,查订单最新状态 这句不合理吧……

mysql 子查询 group by的使用

1 group by表示排序,后面查询出来的是每一组的第一条数据,where后面表示提出条件之类的,如果对排序需要有条件筛选,应该在属性名后接 having +条件 。而不能使用where 

2 聚合函数sum() count() avg() max() min() GROUP BY 是分组查询,把符合条件的同一类分在一组 一般 GROUP BY 是和聚合函数配合使用的。例如

技术分享

查询出来每门课的分数都大于80分的人   select  name,min(score) as a from zt_score GROUP BY `name` HAVING a>80

技术分享

打印出如下格式

技术分享

select date,sum(result=‘胜‘) as win,sum(result=‘负‘) as lose from zt_miya  GROUP BY date

 

以上是关于mysql 查询符合条件的 最后一条的主要内容,如果未能解决你的问题,请参考以下文章

mysql只能取出一条记录为啥不显示

MySql-索引

mysql如何判断符合查询条件的数据有两条

Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法

mysql随机查询符合条件的几条记录

怎样一个表中的2个查询结果合并到一个表中的两列