sql 时间 分组 查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 时间 分组 查询相关的知识,希望对你有一定的参考价值。

我现在数据库里MINI字段每5分钟就有一条记录

我现在想查询其中一天的数据,同时以小时分组娶每小时中最小的一条数据(一小时有12条数据)

大概是下面这种形式

SELECT MIN(ServerTime) AS ServerTime, X, Y
FROM Wow_PhoneDate
GROUP BY DATEPART(hh, ServerTime), X, Y, Mini
HAVING (Mini = '123456789223456')

上面的可以实现以小时分组,但是下面的就不可以了

SELECT MIN(ServerTime) AS ServerTime, X, Y
FROM Wow_PhoneDate
GROUP BY DATEPART(hh, ServerTime), X, Y, Mini
HAVING (Mini = '123456789223456') AND (CONVERT(varchar(10), ServerTime, 23)
= '2009-09-24')

参考技术A 分组就分组了
后面的having是分组后的过滤,楼主这么写我实在是不明白什么意思。
你根本没把Mini 字段显示出来啊,怎么过滤?

不过你要问的我看明白了
就是你要查询时间ServerTime在2009年9月24号的

条件写得有点不正规,因为你的MIN(ServerTime) AS ServerTime别名和你的字段重了,所以不好使了。换个别名试试
参考技术B 试试
SELECT MIN(ServerTime) AS ServerTime, X, Y
FROM Wow_PhoneDate
WHERE CONVERT(varchar(10), ServerTime, 23) = '2009-09-24'
GROUP BY DATEPART(hh, ServerTime), X, Y, Mini
HAVING (Mini = '123456789223456')本回答被提问者采纳

按时间序列分组的 SQL 查询

【中文标题】按时间序列分组的 SQL 查询【英文标题】:SQL query to group by chronological series 【发布时间】:2020-06-05 23:55:30 【问题描述】:

我正在研究一个人们在不同时间访问地点的商业案例。

我需要将每个系列分组在同一位置并将其作为一行返回。

为了说明,我创建并填充了表格visit(见下文)。

select loc, hour from visit order by hour给我

Loc Hour
1   10
1   11
1   12
2   13
2   14
1   15
1   16

我想要一个返回以下内容的 SQL:

Loc first last
1 10 12
2 13 14
1 15 16

有什么建议吗?


示例中的表格/数据

create table visit ( loc number(2), hour number(2) );

insert into visit (loc, hour) values (1,10);
insert into visit (loc, hour) values (1,11);
insert into visit (loc, hour) values (1,12);
insert into visit (loc, hour) values (2,13);
insert into visit (loc, hour) values (2,14);
insert into visit (loc, hour) values (1,15);
insert into visit (loc, hour) values (1,16);

【问题讨论】:

请用您正在使用的数据库标记您的问题。 【参考方案1】:

这是一个典型的间隙和孤岛问题,您希望将同一位置的“相邻”访问组合在一起。

这是使用row_numbers 之间的差异来解决它的一种方法:

select 
    loc,
    min(hour) first_hour,
    max(hour) last_hour
from (
    select
        t.*,
        row_number() over(order by hour) rn1,
        row_number() over(partition by loc order by hour) rn2
    from visit t
) t
group by loc, rn1 - rn2
order by first_hour

Demo on DB Fiddle

位置 |第一小时 |上一个小时 --: | ---------: | --------: 1 | 10 | 12 2 | 13 | 14 1 | 15 | 16

【讨论】:

以上是关于sql 时间 分组 查询的主要内容,如果未能解决你的问题,请参考以下文章

按时间序列分组的 SQL 查询

sql分组查询

sql多条件分组查询,求sql语句。

sql多表分组查询并排序的问题

SQL查询取分组最大值

SQL查询按范围分组