​​SQL如何找出一个表中,日期距离当前最近的那条记录?

SQL​​如何找出一个表中,日期距离当前最近的那条记录?

示例1:查找最晚入职员工的全部信息
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));html

答:方法一:post

排序,降序。对hire_date字段排序降序,此时最晚的时间排在第一个,再用LIMIT取出。

SELECT * FROM employees ORDER BY hire_date DESC LIMIT 0,1;ui

LIMIT m,n : 表示从第m+1条开始,取n条数据;LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写。本题limit 0,1 表示从第(0+1)条数据开始,取一条数据,即取出最晚入职员工。 方法二:子查询先找出 hire_date 字段的最大值,再把该值当成  employees 表的 hire_date 查询条件。  SELECT * FROM employees WHERE hire_date = (SELECT MAX(hire_date) FROM employees);

示例2:

表,PanDian

id         Name           CheckDate
1             a               2007-2-1
2             a               2007-2-3
3             b               2007-2-4

我现在要找出Name为a,时间最接近于现在时间的记录

SELECT   *
FROM   PanDian
WHERE   (Name   =   'a ')   AND   (CheckDate   =
(SELECT   MAX(CheckDate)
FROM   PanDian))

可以找出一条记录就是:2         a           2007-2-3

但是我想使用上面语句找出:3         b       2007-2-4的时候,也就是:
SELECT   *
FROM   PanDian
WHERE   (Name   =   'b ')   AND   (CheckDate   =
(SELECT   MAX(CheckDate)
FROM   PanDian))

得到的却是一条也没有的空记录,如何解决?谢谢

------解决方案--------------------
SELECT *
FROM PanDian
WHERE (Name = 'b ') AND (CheckDate =
(SELECT MAX(CheckDate)
FROM PanDian WHERE (Name = 'b ') ))

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070130

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
id Name CheckDate
1 a 2007-2-1
2 a 2007-2-3
3 b 2007-2-4

我现在要找出Name为a,时间最接近于现在时间的记录

select name , max(checkdate) as checkdate from tb group by name

select a.* from tb a,
(select max(checkdate) as checkdate from tb where name = 'a ') b
where a.name = b.name and a.checkdate = b.checkdate
------解决方案--------------------
create table T(
id int,
Name varchar(10),
CheckDate varchar(10)
)

insert into T
select 1, 'a ', '2007-2-1 '
union all
select 2, 'a ', '2007-2-3 '
union all
select 3, 'b ', '2007-2-4 '
union all
select 4, 'b ', '2007-2-6 '
union all
select 5, 'b ', '2007-2-2 '
union all
select 6, 'c ', '2006-12-31 '

select *
from T t1
where (checkdate=(select max(checkdate) from T where t1.name=T.name ))
order by name
----------------------------------
2 a 2007-2-3
4 b 2007-2-6
6 c 2006-12-31

示例3:

sql中,取时间最近的一条记录

sub_dh date Gname

A1001 2015/3/24 A清单

A1001 2015/4/25 B清单

A1002 2015/5/26 A清单

A1002 2015/6/27 C清单

A1003 2015/5/28 A清单
如上表,表明叫test。
同一个sub_dh会有多条记录,抓取date最近的一条记录,就好了
最终结果是
sub_dh date Gname

A1001 2015/4/25 B清单

A1002 2015/6/27 C清单

A1003 2015/5/28 A清单

select test.sub_dh, test.date, test.Gname

from test ,(SELECT Sub_dh as dh, MAX(Date) as date FROM dbo.test GROUP BY SUB_DH) a

where test.Sub_dh = a.dh

and test.date = a.date

示例4:

select *,max(create_time) from a

where create_time<="2017-03-29 19:30:36"

group by user_id

这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。

006fRELkly4gpa2riwt49j30b908igm0

扩展资料:

SQL数据查询语句

1、语句语法简单归纳为:

SELECT select_list [INTO new_table_name] [FROM table_source]

[WHERE search_condition] [GROUP BY group_by_expression]

[HAVING search_condition] [ORDER BY order_expression [ASC | DESC]]

2、WITH子句用于指定临时命名的公用表达式,在单条语句(SELECT、INSERT、UPDATE、DELETE)的语句执行范围内定义。

3、LIKE关键字

用于模糊查询,通配符有%、_、[ ]、[^]

%:后面可以跟零个或多个字符

_:匹配任意单个字符

[ ]:查询一定范围内的单个字符,包括两端数据

[^]:表示不在一定范围内的单个字符,包括两端数据

示例5:

先看应用场景,汽油的价格存在一张表中,每个城市的价格不同,且隔一段时间全国所有城市的油价就会调整,调整幅度也各不相同,统计之后的价格由负责人以excel的形式使用其他功能批量写入数据库中,存在表中的数据大概(不便泄露真实字段)如图所示:

006fRELkly4gpa2tail74j30kd09r3z4

表中没有其他字段代表该条记录已经作废,所以读取价格时,总是读取最新的一条记录,具体实现如下:

SELECT *

FROM

(

SELECT *,

ROW_NUMBER() OVER (PARTITION BY CityName ORDER BY FromTime DESC) RowIndex

FROM dbo.MyTable

) B

表中所用的PARTITION BY与Group By有类似,但又有不同点!

当然后来我又给同事写了一条,

select t.* from
(select f.* from (select * from v_baigou_dingdan order by `订单时间` desc) f group by f.`店铺名称`,f.`商品名称`,f.`商品属性`
) t

这个的执行效率更高。

如果大家有想要的软件,或者想要知道哪方面的办公技巧,下方评论哦~

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

​​Excel中居然隐藏了3个这么好用的技巧,可惜99%的人都不会!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>