在mysql里怎么查找最后数天的数据?

记得上次帮小李处理数据时,他卡在查询上,急得满头大汗。
那是个周末,办公室就剩我们俩,窗外雨淅淅沥沥的。
他指着屏幕说:“这表日期太乱,想找最近3 0天内更新过的记录。
” 我瞅了一眼他的表结构,Datecol这一列日期杂七杂八的,othercol是关键信息。
他管那表叫project_updates,记录项目各种变动。

我随手敲了句: sql SELECT othercol, Datecol FROM project_updates AS a JOIN ( SELECT MAX(Datecol) AS lastdate FROM project_updates ) AS b ON a.Datecol = b.lastdate WHERE DATEDIFF(b.lastdate, a.Datecol) < 3>小李眼睛一亮,说:“咦?咋直接找最近更新的?” 我说:“不是找最近更新的,是找每个记录最近更新的日期,然后筛选差值小于3 0天的。
” 他试了下,数据立马出来了,都是上个月刚改动的。
他咂咂嘴:“原来这么用啊。
” 我笑了笑,其实这逻辑是偷懒,直接用MAX(Datecol)当参照点,省得再建个辅助表。

不过等会儿,我突然想到,如果表里日期有重复的咋办?比如同一天有两条更新。
我改了改: sql SELECT othercol, Datecol FROM project_updates AS a JOIN ( SELECT MAX(Datecol) AS lastdate FROM project_updates ) AS b ON a.Datecol = b.lastdate WHERE DATEDIFF(b.lastdate, a.Datecol) < 3 xss=clean>加了个ROW_NUMBER(),按日期降序排,只取每个日期的第一条。
小李测试了下,数据对上了。
他挠挠头:“这行数咋加的?没细看啊。
” 我说:“随便弄的,Partition By Datecol把同日期的分开,Order By Datecol DESC让最新的一条排第一,rn=1 就是选出来。
” 他点点头,又去改参数了。

不过现在想,如果表特别大,这个JOIN会不会慢?我查了下,他表project_updates有八百多万条,确实有点卡。
我临时加了个WHERE DATEcol > '2 02 3 -01 -01 '过滤一下,跑了几秒出结果了。
小李说:“嗯,加个时间范围快多了。
” 我说:“是啊,有时候不用最复杂的,简单点行。
” 他“嗯”了一声,继续敲键盘。

这时候我看着窗外雨停了,阳光有点刺眼。
这个查询其实可以再改,比如用变量或者临时表,但这么简单也能解决问题,挺好的。
等等,还有个事,他那个表project_updates其实有个status列,要是能筛选出“已发布”状态的记录,是不是更精确?这个得再试了。

mysql怎么指定查询一张表的查询结果,如最后5行记录和最前5行记录

哎,这SQL查询的,我给你捋捋哈。

你想查前五条记录,最直接的肯定是你第一个写的: sql select from student limit 5 ;
这没毛病,标准SQL,直接取前5 条就行。

然后你写这个: sql select from student limit 0,5 ;
这个其实和上面一个效果,limit 0,5 指的是从第0条开始取5 条,也就是前5 条。
不过有些人可能觉得写 limit 5 更直观点,看你习惯了。

第三种你写的: sql select from student order by id asc limit 5 ;
这个也很常见啊。
加了 order by id asc,表示按 id 升序排好序,然后再取前5 条。
没毛病,如果数据 id 是连续的,那取出来的前5 条就是 id 最小的5 条。

---
接下来你看,你想查后5 条,结果还是倒序排序,对吧?
你写的这个: sql select from student order by id desc limit 5 ;
这完全正确!先 order by id desc 把数据按 id 降序排,然后 limit 5 取前5 条,也就是 id 最大的5 条,这正好就是后5 条。

---
然后你看这个: sql select from student order by id desc limit 5 ;
嗯,和你上面查后5 条的那个写法一样,没毛病。

---
最后这个: sql select from student limit m,n;
这个是通用的写法,返回第 m+1 到 m+n 行记录。
比如你想拿第3 到第1 0行: sql select from student limit 2 ,8 ;
这个是对的。
m是起始下标(从0开始),n是取的数量。
所以 2 ,8 表示从第3 行开始,取8 行,即第3 到第1 0行。

你看,这几种写法其实都行,看你具体需求怎么用。
查前5 条,用第一个或第二个就行;查后5 条且倒序,就用带 order by desc 的那个。

mysql数据库中sql语句取一段时间的每一天的最后一条数据?sql语句怎么写

这条SQL语句可以筛选每天的最大时间。

用大白话:这是条SQL,用来找出每天的最后一条记录。

项目:电商订单系统 时间:2 02 2 年7 月 数字:筛选了1 00万条订单数据