我有一个 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 亚当 | 亚当 | 亚当 |
我正在尝试按顺序对数据进行分组。我有下表:
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) 我有以下事件表,我想将它们分组为较小的时间段,如下所示。
该表必须分为较小的集合,其中集合的起始行和结束行由 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
我已经在各种网站上阅读了有关该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 时,它向我显示了很多记录。这是我需要的一个例子:

所以在带有 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 和时间戳
我想根据标志计算订单的总和。示例表:
+--------------+---------------+---------------+
| 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) 因此,我有一个发货列表,并且有订单总额和每个单独发货的总额,但我正在努力想出代码来为累计发货创建一个附加列,其中包括当前发货,加上该订单之前的所有发货。这是我到目前为止所得到的结果:
| 订单号 | 发货日期 | 合计订单 | 出货总量 | 累计出货量 | 秩 |
|---|---|---|---|---|---|
| 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) 如果当前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 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 来相应地更新列 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 ×10
window-functions ×10
sql-server ×6
t-sql ×6
oracle ×2
apache-spark ×1
date ×1
join ×1
lag ×1
oracle10g ×1
sql-update ×1
sum ×1