SQL srever 查出每天中时间最大的一行
1、我的数据格式
我的数据采集频率10s/次,数据格式如下。
第一列是时间,格式是:2022年01月01日00时00分00秒。
2、想要的效果
我要查出每天中时间最大的一行,把每天的最大时间,如20220101的最大时间,在这里是23时59分55秒。
3、我用的一个“苦力”方法:
where DateTime =( select MAX(DateTime) from [历史列表2022] where DateTime like '20220101%' )
or DateTime =( select MAX(DateTime) from [历史列表2022] where DateTime like '20220101%' )
因为一年也才365天,我干脆 or 365个,用excel 下拉,替换,也挺快能实现。(可以调出我想要的数据。)
领导老板,当然不会乐意。
4、参考的更好写法
于是我参考:
https://blog.csdn.net/weixin_38187317/article/details/109998135?spm=1001.2014.3001.5506
基本上是全盘拷贝。
可以直接看上文的例子,内容简单。
我们原始数据的区别是,参考原文的数据,例子如下:
而我,作为标识的数据,只有DateTime 这一列。我要先筛选一下。或者说先按上文的例子作个(id,这个简单,复制一下DateTime ,就可以)而他的other_id(要分组的字段),我是要用“日期分类的”那就(截取我DateTime的前8位):
构成如下:
。
这时,完全参照上文的例子。:
在这里插入图片描述
报列名无效。
我想,可能这么查出来的只是临时列,并不属于这个table。
所以我把这个表,新建了视图。
5、改动—新建视图:
新建视图,设计,把刚才的查询语句,放过来就行了。
SELECT [DateTime],
[DateTime] AS id,
LEFT(DateTime, 8) AS riqi
6、按自己的数据改例子
上面提到的链接,两个方法都可用:
自己改吧。
这是我的,我做一下记录:
方法一
select* FROM [控制器数据库].[dbo].[View_1]
where id in(
select max(id) as maxid
from [View_1]
inner join
(
select riqi as b_riqi ,MAX (DateTime) max_date
from [View_1]
group by riqi
) b
on riqi = b_riqi and DateTime= max_date
group by riqi)
方法2
select* FROM [控制器数据库].[dbo].[View_1]
where id in(
select max(id) as maxid
from [View_1]
LEFT JOIN
(
select riqi as b_riqi ,MAX (DateTime) max_date
from [View_1]
group by riqi
) b
on riqi = b_riqi and DateTime= max_date
group by riqi,max_date
having max_date is not null)
order by riqi desc
7、结果没问题:
之前那个 or 的办法验证一下:
结果都是200行,笨办法时间久了一点。
接下来希望后期继续补充
8、后期工作
group by
和
INNER JOIN
LEFT JOIN
having
等关键词的用法。
9、重要参考文献
1: https://blog.csdn.net/weixin_38187317/article/details/109998135?spm=1001.2014.3001.5506