63得票6回答
使用窗口函数的日期范围滚动求和

我需要在一个日期范围内计算滚动总和。举个例子,使用AdventureWorks示例数据库,下面的假设语法将完全满足我的需求: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum4...

31得票2回答
MySQL和窗口函数

似乎MySQL不支持窗口函数。 例如,简单的COUNT(*) OVER() AS cnt无法使用。 我不确定的是商业版是否也适用(我假设社区版是有限子集)。 如果不适用,那么如何解决这个缺失的功能?

26得票4回答
请将结果限制在前2行排名。

在SQL Server 2008中,我正在使用RANK() OVER (PARTITION BY Col2 ORDER BY Col3 DESC)来返回带有RANK的数据集。但是每个分区都有数百条记录,所以我将获得从1、2、3......999的排名值。但是我只想要每个PARTITION中的前...

25得票1回答
在日期间隔内进行滚动总和/计数/平均。

在一个跨越18个月的交易数据库中,我想运行一个查询,按照entity_id将每个可能的30天期间进行分组,并计算其交易金额的总和以及该30天期间的交易次数。然后以一种可以进行进一步查询的方式返回数据。经过大量测试,以下代码实现了我想要的大部分功能: SELECT id, trans_ref_...

21得票5回答
在使用窗口函数和OVER时使用DISTINCT

我正在尝试将一个查询从Oracle迁移到SQL Server 2014。 这是我的查询,在Oracle中运行得非常好: select count(distinct A) over (partition by B) / count(*) over() as A_B from MyTable ...

21得票1回答
使用Join和Window函数获取前后值的性能比较 在分析数据时,我们经常需要获取某一列的前一个或后一个值。为了实现这个目标,通常会使用Join操作或Window函数。然而,对于大型数据集来说,选择合适的方法非常重要,以确保查询的性能和效率。 使用Join操作是一种常见的方法,它通过将表与自身连接来获取前后值。这种方法可以提供准确的结果,但在处理大量数据时可能会导致性能问题。因为Join操作需要对整个表进行连接,所以它的执行时间会随着数据量的增加而增加。 另一种方法是使用Window函数,它可以在不进行连接的情况下获取前后值。Window函数是一种强大的工具,它可以在查询中创建一个窗口,并在该窗口内计算聚合函数。相比于Join操作,Window函数更加高效,因为它只需要对特定的窗口进行计算,而不需要对整个表进行连接。 当涉及到性能比较时,我们需要考虑数据集的大小、查询的复杂度以及系统的资源限制。如果数据集较小且查询简单,使用Join操作可能是一个不错的选择。但是,如果数据集很大或查询复杂,使用Window函数可能更加高效。 总之,选择使用Join操作还是Window函数来获取前后值取决于具体的情况。我们应该根据数据集的大小和查询的复杂度来权衡性能和效率,以选择最合适的方法。

我有一张包含2000万行的表格,每一行都有3个列:时间(time)、ID和数值(value)。对于每个ID和时间,都有一个对应的状态数值。我想要知道特定时间和特定ID的前后数值。 我尝试了两种方法来实现这个目标。一种方法是使用连接(join),另一种方法是使用窗口函数(lead/lag)并在...

20得票6回答
从表格中找出连续的“n”个空闲数字。

我有一些带有数字的表格,格式如下(状态为FREE或ASSIGNED): id_set number status ----------------------- 1 000001 ASSIGNED 1 000002 FREE 1 ...

19得票7回答
将连续数值相同的行分组。

我有一个情况,我觉得可以使用窗口函数来解决,但我不确定。 想象一下以下的表格。 CREATE TABLE tmp ( date timestamp , id_type integer ) ; INSERT INTO tmp (date, id_type) VALUES ( '...

16得票2回答
使用窗口函数在分区中传递第一个非空值

考虑一张记录访问的表格。 create table visits ( person varchar(10), ts timestamp, somevalue varchar(10) ) 考虑以下示例数据(时间戳简化为计数器) ts| person | somev...