在回答另一个用户的问题(TheSoftwareJedi)时出现了这个问题 ......
鉴于下表:
ROW_PRIORITY COL1 COL2 COL3
0 0.1 100 <NULL>
12 <NULL> <NULL> 3
24 0.2 <NULL> <NULL>
Run Code Online (Sandbox Code Playgroud)
以及以下查询:
select 'B' METRIC, ROW_PRIORITY,
last_value(col1 ignore nulls) over (ORDER BY ROW_PRIORITY) col1,
last_value(col2 ignore nulls) over (ORDER BY ROW_PRIORITY) col2,
last_value(col3 ignore nulls) over (ORDER BY ROW_PRIORITY) col3
from (SELECT * FROM ZTEST);
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:
METRIC ROW_PRIORITY COL1 COL2 COL3
B 0 0.1 100 <NULL>
B 12 0.1 100 3
B 24 0.2 100 3
Run Code Online (Sandbox Code Playgroud)
预期:
METRIC ROW_PRIORITY …Run Code Online (Sandbox Code Playgroud) SELECT empno, deptno
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by empno, deptno --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
此查询不起作用,因为它Sal应该在group by子句中.任何人都可以解释为什么会这样,并且有没有其他选择在不改变group by子句的情况下获得相同选择的排名?你想只根据工资订购排名.
编辑
假设在emp表中有另一个列名commision,我必须通过deptno和commision分组并仅通过deptno进行分区,那么建议的答案是什么:
SELECT empno, deptno,sum(sal)
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by deptno,commision --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
现在我如何通过depno和commision进行分组,并且只能通过deptno进行分区.
如何在不同的列上进行分组并根据不同列的分区查找排名
无论我在ORDER BY子句中放置什么,结果集的顺序都不会改变.
WITH Results AS (
SELECT DISTINCT
MessageThreadUsers.threadFK,
MessageThreads.threadDate,
Messages.MessageBody,
Messages.senderFK,
Users.userFullName AS senderFullName,
ROW_NUMBER() OVER (ORDER BY MessageThreads.threadDate DESC) AS RowNumber
FROM MessageThreadUsers
JOIN MessageThreads ON MessageThreadUsers.threadFK = MessageThreads.threadID
JOIN Messages ON MessageThreads.threadDate = Messages.messageDate
JOIN Users ON Messages.senderFK = Users.userID
WHERE userFK = 'usr_developer'
)
SELECT * FROM Results WHERE RowNumber BETWEEN 1 AND 10
Run Code Online (Sandbox Code Playgroud) sql sql-server sql-order-by analytic-functions sql-server-2008
我有一个像这样的表 DATE_VALUE:
Date Value
---- -----
01/01/2012 1.5
02/01/2012 1.7
03/01/2012 1.3
04/01/2012 2.1
05/01/2012 3.4
Run Code Online (Sandbox Code Playgroud)
我想计算两个连续日期之间的价值差异之间的差异。但是这个简单的查询不起作用:
select variance(lead( value,1) OVER (order by date) - value)
from DATE_VALUE
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
ORA-30483:此处不允许使用窗口函数 30483。00000 - “此处不允许使用窗口函数” *原因:仅在查询的 SELECT 列表中允许使用窗口函数。并且,窗口函数不能作为另一个窗口或组函数的参数。
如果我将方差函数移出查询,则查询工作正常:
select variance(difvalue) from (
select lead( value,1) OVER (order by rundate) - value as difvalue
from DATE_VALUE
);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以修改查询,以便不使用子查询?
是否可以使用Oracle Analytic函数而不使用子查询在同一记录中的给定数据集中获取最小值Y的对应值X?
例如:
如果我具有以下数据集“ ds1”:
Col1 Col2
A 1
B 2
C 3
D 4
E 4
A 10
Run Code Online (Sandbox Code Playgroud)
通常,为了在Col1中找到对应于Col2中最小值“ 1”的值“ A”,我将编写以下查询:
select ds1.col1
from ds1
, (select min (col2) col2
from ds1) min_ds1
where ds1.col2 = min_ds1.col2
/
Run Code Online (Sandbox Code Playgroud)
这是这种测试用例的执行代码:
### 1014.010, Start time is: 10/30/2019 11:39:35am
MYUN@MYDB-C1>>create table ds1 (col1 varchar2 (1), col2 number)
2 /
Table created.
Elapsed: 00:00:00.01
MYUN@MYDB-C1>>insert into ds1 (col1, col2)
2 select 'A', 1 from dual
3 union all select 'B', 2 from dual …Run Code Online (Sandbox Code Playgroud) 基本上我正在尝试查询只包含图像的页面.我需要提供tripID号码,然后提供ROWID(因为可能有多个图像)来接收单个图像.我将循环,直到每个图像都在html的相应图像框中.
这段代码似乎不起作用(我得到无效的列名'ROWID'),但是如果我删除AND ROWID ='1'它会返回所有图像及其行ID如下:
ROWID PHOTO
1 32jjr3h2jh23hj4h32jh42ll23j42
2 HU8308DJAOID9ASIDJI32C89EE29
Run Code Online (Sandbox Code Playgroud)
-
Select ROW_NUMBER() OVER (ORDER BY Photo ASC) AS ROWID, TBL_Photo.Photo
From TBL_Photo
left join TBL_TripDetails
ON TBL_Photo.TripID=TBL_TripDetails.pkiTripID
Where pkiTripID = '121' AND ROWID = '1'
Run Code Online (Sandbox Code Playgroud) 我正在使用Oracle.
假设我有一个包含此样本的表,随机,内容:
columnA | columnB | content
--------------------------------
AfBkxZ | 292 | a
LDglkK | 181 | b
AfBkxZ | 51 | c
AfBkxZ | 315 | d
LDglkK | 808 | e
Cee89g | 1 | f
Run Code Online (Sandbox Code Playgroud)
我想在其中有一个视图,其中我对columnA中的每个值都有一个唯一的编号,并且对于其中columnA具有该值的行内的记录编号.
基于以上样本数据的结果:
Group_number | Record_number | columnB | content
------------------------------------------------
1 | 2 | 292 | a (1.2)
3 | 1 | 181 | b (3.1)
1 | 1 | 51 | c (1.1)
1 | 3 | 315 | d (1.3) …Run Code Online (Sandbox Code Playgroud) 我有一张表记录任务完成时间.任务属于工作流程,但在此示例中,我只是尝试让LAG正常工作.
我想找到有关每项任务需要多长时间的信息.
我试过了:
select
completed_date,
lag(completed_date) over (order by id) prevrow,
prevrow - completed_date
from
task_complete
where workflow_id = 1
Run Code Online (Sandbox Code Playgroud)
但这会导致错误.有没有办法计算当前行和上一行之间的差异?
鉴于下表
PAYMENT_Date TRANSACTION_TYPE PAYMENT_AMT
1/1/2012 P 184366
1/1/2012 R -5841
1/2/2012 P 941
1/3/2012 P 901
1/3/2012 R 5841
Run Code Online (Sandbox Code Playgroud)
以及以下查询:
select payment_date, transaction_type, payment_amt,
SUM(payment_amt) OVER(ORDER BY payment_date, transaction_type
RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS RUNNING_BALANCE
from TABLE;
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:
PAYMENT_Date TRANSACTION_TYPE PAYMENT_AMT RUNNING_BALANCE
1/1/2012 P 184366 0
1/1/2012 R -5841 -184366
1/2/2012 P 941 -178525
1/3/2012 P 901 -179466
1/3/2012 R 5841 -180367
Run Code Online (Sandbox Code Playgroud)
预期:
PAYMENT_Date TRANSACTION_TYPE PAYMENT_AMT RUNNING_BALANCE
1/1/2012 P 184366 0
1/1/2012 R -5841 184366
1/2/2012 P …Run Code Online (Sandbox Code Playgroud) 我试过运行下一个查询
select sum(balance) over (partition by client order by card desc, date_tr desc)
from table_1
Run Code Online (Sandbox Code Playgroud)
在结果中,我有下一条错误消息:
FAILED: SemanticException Range based Window Frame can have only 1 Sort key
Run Code Online (Sandbox Code Playgroud)
我不能在order by句子中使用 2 个排序键是真的吗?或者有一种方法如何使用 2 个排序键?
说,我有以下数据:
select 1 id, date '2007-01-16' date_created, 5 sales, 'Bob' name from dual union all
select 2 id, date '2007-04-16' date_created, 2 sales, 'Bob' name from dual union all
select 3 id, date '2007-05-16' date_created, 6 sales, 'Bob' name from dual union all
select 4 id, date '2007-05-21' date_created, 4 sales, 'Bob' name from dual union all
select 5 id, date '2013-07-16' date_created, 24 sales, 'Bob' name from dual union all
select 6 id, date '2007-01-17' date_created, 15 sales, 'Ann' …Run Code Online (Sandbox Code Playgroud) 我有下表,每周都有不同的价格,需要像上一栏一样的编号.具有相同价格的连续行应具有相同的数字,如11/12或18/19周.但另一方面,第2周和第16周的价格相同但不连续,所以他们应该得到不同的数字.
w | price | r1 | need =========================== 1 167,93 1 1 2 180 1 2 3 164,72 1 3 4 147,42 1 4 5 133,46 1 5 6 145,43 1 6 7 147 1 7 8 147,57 1 8 9 150,95 1 9 10 158,14 1 10 11 170 1 11 12 170 2 11 13 166,59 1 12 14 161,06 1 13 15 162,88 1 14 16 180 2 15 17 183,15 1 16 18 195 1 …
我有一个 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 亚当 | 亚当 | 亚当 |