标签: window-functions

在 MAX() OVER PARTITION 中包含 NULL

我有一个 Oracle 查询,我想在合并 NULL 时通过 PARTITION 返回 MAX()。

例如,如果原始数据是:

姓名 | 日期
-----------------------
亚当 | 01/21/14 00:00
亚当 | 
亚当 | 01/22/14 00:01
亚当 | 01/23/14 00:02

使用以下查询返回以下内容:

MAX(date) OVER (PARTITION BY name ORDER BY date)
Run Code Online (Sandbox Code Playgroud)
姓名 | 日期
-----------------------
亚当 | 01/21/14 00:00
亚当 | 01/22/14 00:01
亚当 | 01/23/14 00:02
亚当 | 01/23/14 00:02

是否有可能让它像 NULL 是一个 MAX() 值一样,所以它会返回以下内容?

姓名 | 日期
-----------------------
亚当 | 01/21/14 00:00
亚当 | 
亚当 | 
亚当 | 

sql oracle analytic-functions oracle10g window-functions

0
推荐指数
1
解决办法
2773
查看次数

如何按顺序对相同的值进行分组

我正在尝试按顺序对数据进行分组。我有下表:

id  num
-------
1   1
2   1
3   1
4   2
5   1
6   2
7   2
8   4
9   4
10  4
Run Code Online (Sandbox Code Playgroud)

我需要 SQL 查询来输出以下内容:

num       count(num)
-------------------    
1          3    
2          1    
1          1    
2          2    
4          3 
Run Code Online (Sandbox Code Playgroud)

样本数据:

select * into #temp 
from (
    select 1 as id, 1 as num union all
    select 2,  1  union all
    select 3,  1  union all
    select 4,  2  union all
    select 5,  1  union all
    select 6,  2  union …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions gaps-and-islands

0
推荐指数
1
解决办法
256
查看次数

使用 Apache Spark SQL 对结果进行子分组

我有以下事件表,我想将它们分组为较小的时间段,如下所示。

该表必须分为较小的集合,其中集合的起始行和结束行由 geohash 确定,如果 geohash 相同,则集合保留包含行,直到发现下一个 geohash 不同。

key time_stamp  geohash
k1  1           abcdfg
k1  5           abcdfg
k1  7           abcdf1
k1  9           abcdfg
k1  10          abcdf2
k1  12          abcdf2
k1  21          abcdf2
Run Code Online (Sandbox Code Playgroud)

如何使用 Apache Spark SQL 语法生成以下输出

key geohash first_time  last_time   duration    num_events
k1  abcdfg  1           5           4           2
k1  abcdf1  7           7           0           1
k1  abcdfg  9           9           0           1
k1  abcdf2  10          21          11          3
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我实现这一目标吗?

sql window-functions gaps-and-islands apache-spark apache-spark-sql

0
推荐指数
1
解决办法
296
查看次数

Count() 一个名字与其余信息一起出现在表格中的次数

我已经在各种网站上阅读了有关该count()功能的信息,但我仍然无法完成这项工作。

我用(id、name、last name、age)做了一个小表,我需要检索所有列加上一个新列。在这个新列中,我想显示名称在表格中出现或重复的次数。

我已经进行了测试,但只能检索带有计数列的 COLUMN NAME,但我无法从表中检索所有数据。

目前我有这个

   select a.n_showsup, p.*
   from [test1].[dbo].[person] p,
   (select count(*) n_showsup
    from [test1].[dbo].[person])a
Run Code Online (Sandbox Code Playgroud)

这给了我关于输出的所有数据,但在 n_showsup 列上,它只给了我行数,现在我知道这是因为我缺少一个 GROUP BY 但是当我写 group by NAME 时,它向我显示了很多记录。这是我需要的一个例子:

测试台

sql t-sql sql-server join window-functions

0
推荐指数
1
解决办法
231
查看次数

Firebase BigQuery,在触发“app_remove”之前获取 event_name

所以在带有 Firebase Analytics 源的 Biquery 中。你有事件“app_remove”

下面显示了 users_pseudo_id 和他们删除应用程序时的时间戳。

SELECT user_pseudo_id, event_timestamp   FROM `private-4cb88.analytics_184376442.events_20200324` where event_name LIKE "%app_remove%" LIMIT 100
Run Code Online (Sandbox Code Playgroud)

我想要的数据是来自那些 user_pseudo_id 的先前 event_name。

如何在用户 app_remove 之前(app_remove 时间戳)获取 event_names?所以我可以理解在他们删除应用程序之前的最后一个事件是什么。

我已经尝试了好几天了,我真的需要一些帮助。

我想要的结果是一个表,其中包含该事件的每个用户 ID、先前的 event_name 和时间戳

sql date window-functions gaps-and-islands google-bigquery

0
推荐指数
1
解决办法
300
查看次数

基于标志创建计算列 - TSQL

我想根据标志计算订单的总和。示例表:

+--------------+---------------+---------------+
|  Order       |     Flag      |     Amount    |
+--------------+---------------+---------------+
| Order1       |     Yes       |     500       |
| Order1       |     Yes       |     325       |
| Order2       |     Yes       |     799       |
| Order2       |     No        |     550       |
| Order2       |     Yes       |     675       |
| Order3       |     No        |     800       |
+--------------+---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

我想创建 2 个新列。

一列是订单总量,另一列是订单总量,其中标志为“是”。

上例表中想要的结果:

+--------------+---------------+---------------+---------------+---------------+
|  Order       |     Flag      |     Amount    |  TotalAmount  | Yes_amount    |
+--------------+---------------+---------------+---------------+---------------+
| Order1       |     Yes       |     500       |     825       | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sum window-functions

0
推荐指数
1
解决办法
50
查看次数

如何使用窗口函数根据日期或排名列聚合数据?

因此,我有一个发货列表,并且有订单总额和每个单独发货的总额,但我正在努力想出代码来为累计发货创建一个附加列,其中包括当前发货,加上该订单之前的所有发货。这是我到目前为止所得到的结果:

订单号 发货日期 合计订单 出货总量 累计出货量
22396 2022-04-04 639,964 2,983 639,966 3
22396 2022-03-31 639,964 5,626 639,966 2
22396 2022-02-24 639,964 631,355 639,966 1

因此,这是同一订单的 3 次单独发货。第 3 行中的第一次发货是正确的,但我需要第 2 行的累计发货列是两者的发货总和,因此 631,555 美元 + 5,626 美元。按照相同的逻辑,第 1 行应该是所有 3 行的总和,此时将等于订单总额 639,964 美元。看起来是这样的:

订单号 发货日期 合计订单 出货总量 累计出货量
22396 2022-04-04 639,964 2,983 639,964 3
22396 2022-03-31 639,964 5,626 636,981 2
22396 2022-02-24 639,964 631,355 631,355 1

我假设实现此目的的最佳方法是使用 over(partition by ()),但我正在努力想出代码。这是我到目前为止所拥有的:

SELECT
    OrderNo,
    ShipDate,
    OrderTotal,
    [Shipment Total],
    SUM([Shipment Total]) OVER(PARTITION …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions

0
推荐指数
1
解决办法
602
查看次数

实例声明中的SQL滞后

如果当前CLUSTERn =上一个CLUSTERn,然后将上一个PRODCAT作为PREVCAT添加到当前行,那么我的case语句出了什么问题,我将不胜感激。

ORA-30484: missing window specification for this function
30484. 00000 -  "missing window specification for this function"
*Cause:    All window functions should be followed by window specification,
           like <function>(<argument list>) OVER (<window specification>)
*Action:
Error at Line: 11 Column: 30
Run Code Online (Sandbox Code Playgroud)
SELECT  CLUSTERn,
        MEMBERn,
        COUNT(*) OVER ( PARTITION BY CLUSTERn ORDER BY MEMBERn, PRODCAT, STARTd, ENDd ) AS NEWRANK,
        CASE WHEN CLUSTERn = LAG(CLUSTERn) THEN LAG(PRODCAT) ELSE 'New' END AS PREVCAT,
        STATUS,
        PRODCAT,
        JOINTYPE,
        JOINRANK,
        CSP,
        PROGID,
        PROMNAME,
        PROMOID,
        COHORT, …
Run Code Online (Sandbox Code Playgroud)

sql oracle lag window-functions

-1
推荐指数
1
解决办法
2939
查看次数

对行进行编号并在特定条件下将计数器重置为 1

如何在 SQL Server 中针对关键字重置计数器?在以下数据中,每次找到字符串 'A' 时,计数器都需要重置为 1:

Item    Date
A       01.01.2019
B       02.01.2019
C       03.01.2019
D       04.01.2019
A       05.01.2019
B       06.01.2019
A       07.01.2019
B       08.01.2019
C       09.01.2019
D       10.01.2019
E       11.01.2019
A       12.01.2019
A       13.01.2019
A       14.01.2019
B       15.01.2019
Run Code Online (Sandbox Code Playgroud)

每次A找到我都需要重置计数器:

Count    Item    Date
1        A       01.01.2019
2        B       02.01.2019
3        C       03.01.2019
4        D       04.01.2019
1        A       05.01.2019
2        B       06.01.2019
1        A       07.01.2019
2        B       08.01.2019
3        C       09.01.2019
4        D       10.01.2019
5        E       11.01.2019
1        A …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions

-1
推荐指数
1
解决办法
108
查看次数

SQL Server 2016:更新记录时分组

我有一个场景,我需要根据产品确定每个客户/业务组合的保证金类型 - 这意味着客户/业务组合的保证金最高的产品应被标识为“高”保证金类型。具有相同组合的所有其他产品应标识为低。所以,我需要一个 SQL 来相应地更新列 MARGIN_TYPE。

我尝试做这样的事情,但不明白如何按客户/业务组合对其进行分组。任何帮助将不胜感激。谢谢!

UPDATE ORDER_TABLE
SET MARGIN_TYPE = 'High'
where MARGIN = (SELECT MARGIN FROM (SELECT MAX(MARGIN) FROM ORDER_TABLE) AS 
MARGIN) 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

sql t-sql sql-server window-functions sql-update

-2
推荐指数
1
解决办法
70
查看次数