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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库中sql语句取一段时间的每一天的最后一条数据?sql语句怎么写相关的知识,希望对你有一定的参考价值。

比如下面的表取7月23号到7月28号这一段时间的每一天的最后一条数据

sql语句该怎么写,还有时间不一定按顺序排列

select aa.datetemp,max(aa.datetime) from (select date_format(datetime,'%Y-%m-%d') datetemp,datetime from 表名 ) aa group by aa.datetemp 这样应该可以获取到每天最大时间的这一条数据了。具体小部分修改你根据自己需求追问

能不能先格式化一下

追答

啥意思

参考技术A select a.* from 表名 a,
(select max([datetime]) [datetime],convert(varchar(10),[datetime],120) [date] from 表名 group by convert(varchar(10),[datetime],120)) b
where a.[datetime]=b.[datetime]
and convert(varchar(10),a.[datetime],120)=b.[date]

追问

看不清楚哪些datetime是字段,哪些datetime是类型,我把我图片上的datetime字段名改为key,麻烦您再写一下

追答

所有的datetime你都换成你字段名

date不换

追问

http://zhidao.baidu.com/question/1046629715709941539.html

本回答被提问者采纳
参考技术B select * from tab a where key in
(select max(key) from tab b where convert(varchar(8),a.key,112) = convert(varchar(8),a.key,112))

追问

运行了下,不行,还没分组

追答

每天取一个,就是这样取的。如果要取多条数据,可以采用下面的语法。

select * from tab a where key in
(select top 5 key  from tab b where convert(varchar(8),a.key,112) = convert(varchar(8),a.key,112) order by key desc )

 要不发一个远程,我帮你。
不好意思看错了,我看成了mssql,等一下,我改成 mysql的语法。

select * from tab a where key in
(select max(key) from tab b where cast(key as date) = cast(key as date) )

追问

还是不行,我把表的脚本写出来了,你再看看
http://zhidao.baidu.com/question/1046629715709941539.html

追答

不好意思今天下许没有空。

select * from mytable a where mydate in
(select max(mydate) from mytable b where cast(a.mydate as date) = cast(b.mydate as date) ) order by mydate
用你的建表语法试了了,结果应该是对的。

在几天的持续时间内,选择表格中记录的每一天的最后一个条目

【中文标题】在几天的持续时间内,选择表格中记录的每一天的最后一个条目【英文标题】:Select the last entry recorded in a table for each day, within a duration of days 【发布时间】:2020-07-27 11:55:22 【问题描述】:

如何选择每天记录的最后一个条目?在此示例中,我需要过去 5 天内每天订购的最后一个项目编号和最后一个 DateOrdered 条目。这是我的桌子:

ItemNumber  |       DateOrdered
    1           2020-04-01 08:00:00.000
    3           2020-04-01 09:00:00.000
    5           2020-04-01 10:00:00.000
    4           2020-04-02 09:00:00.000
    6           2020-04-02 10:00:00.000
    7           2020-04-03 08:00:00.000
    3           2020-04-03 09:00:00.000
    2           2020-04-03 10:00:00.000
    5           2020-04-04 10:00:00.000
    8           2020-04-05 08:00:00.000
    2           2020-04-05 09:00:00.000
    8           2020-04-05 10:00:00.000

这是我需要的结果:

ItemNumber  |      DateOrdered
    5           2020-04-01 10:00:00.000
    6           2020-04-02 10:00:00.000
    2           2020-04-03 10:00:00.000
    5           2020-04-04 10:00:00.000
    8           2020-04-05 10:00:00.000

这是我能做到的最接近的:

with tempTable as
(
  select
    *,
    row_number() over(partition by datediff(d, 0, DateOrdered) order by DateOrdered desc) as rn 
  from myTable
)
select *
from tempTable  
where rn = 1

【问题讨论】:

【参考方案1】:

你快到了。您只需要修复分区的定义,以便将属于同一天的所有行放在一起。

应该这样做:

with tempTable as
(
  select
    *,
    row_number() over(partition by cast(DateOrdered as date) order by DateOrdered desc) as rn 
  from myTable
)
select *
from tempTable  
where rn = 1

【讨论】:

以上是关于mysql数据库中sql语句取一段时间的每一天的最后一条数据?sql语句怎么写的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎么得到时间段每一天,不用表,就是得到一个时间段的每一天的日期

sql 查询一段时间内 每一天的统计数据

Oracle获取一段时间范围内的日期,从2006-01-01到2013-12-31的每一天的日期表

sql查询一段时期里每一天所有员工的打卡记录

oracle 查询一段时间内每一天的统计数据sql怎么写

MySQL 获取某个时间段每一天每一个小时的统计数据