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最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。
扩展资料:
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的形式使用其他功能批量写入数据库中,存在表中的数据大概(不便泄露真实字段)如图所示:
表中没有其他字段代表该条记录已经作废,所以读取价格时,总是读取最新的一条记录,具体实现如下:
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
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论