sql 如何查询同一个字段中,日期最近的那个记录
姓名 日期 行程
张三 2011-9-1 北京
李 四 2011-9-2 西安
张三 2011-9-4 南京
张三 2011-9-10 云南
想要的结果是:
张三 2011-9-10 云南
李四 2011-9-2 西安 展开
使用“order by 字段名 desc ”对日期字段进行倒序排序即可。
sql语法:select * from 表名 order by 日期字段名 desc
其中,排序的时候order by 后面跟着需要进行排序的字段名,排序可以有两种,默认是asc升序(在sql中可以不写),如果希望降序排列的话,可以使用desc。如你想要最近的日期的话就只需要降序即可。
举例:如tpl_purchase_order 是我的订单表,该表有一个字段创建日期(字段名:CREDATE)是日期类型,希望通过sql实现按照按照创建日期由近到远的顺序排列。
对应sql: select * from tpl_purchase_order order by credate desc;
sql执行后输出结果为:
扩展资料:
我们可以通过一些实例来具体分析排序order by 子句的用法:
假设有Orders 表如下:
1、实例 1
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果如下:
2、实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
结果如下:
3、实例 3
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果如下:
4、实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果如下:
注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
FROM TAB,(SELECT 姓名,max(日期) 日期
FROM TAB
GROUP BY 姓名) Z
WHERE TAB.姓名=Z.姓名
AND TAB.日期=Z.日期
group by 姓名
having 日期=max(日期)
2018-05-10
SELECT a.姓名,a.日期,a.行程 FROM TAB a
WHERE DATEVALUE(a.日期)&a.姓名 in (SELECT MAX(DATEVALUE(日期)&姓名 FROM TAB GROUP BY 姓名)
直接比较日期会出错,将日期变成数字比,最近的日期不同组也有重复的,直接in日期会出统计错误,用&连接个能表唯一的字段就能避免