我Row_Number()在where子句中找到了一个用函数回答的问题.当我尝试一个查询时,我收到以下错误:
"消息4108,级别15,状态1,行1窗口函数只能出现在SELECT或ORDER BY子句中."
这是我试过的查询.如果有人知道如何解决这个问题,请告诉我.
SELECT employee_id
FROM V_EMPLOYEE
WHERE row_number() OVER ( ORDER BY employee_id ) > 0
ORDER BY Employee_ID
Run Code Online (Sandbox Code Playgroud) 使用以下MySQL表:
+-----------------------------+
+ id INT UNSIGNED +
+ name VARCHAR(100) +
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
如何排序时,如何选择单个行及其在表中其他行中的位置name ASC.因此,如果表数据如下所示,则按名称排序时:
+-----------------------------+
+ id | name +
+-----------------------------+
+ 5 | Alpha +
+ 7 | Beta +
+ 3 | Delta +
+ ..... +
+ 1 | Zed +
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
如何选择Beta获取该行当前位置的行?我正在寻找的结果集是这样的:
+-----------------------------+
+ id | position | name +
+-----------------------------+
+ 7 | 2 | Beta +
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)
我可以做一个简单的SELECT * FROM tbl ORDER BY name ASC然后枚举PHP中的行,但是为一行加载一个可能很大的结果集似乎很浪费.
我想找到累积或运行的字段数量,并将其从分段插入表格.我的暂存结构是这样的:
ea_month id amount ea_year circle_id
April 92570 1000 2014 1
April 92571 3000 2014 2
April 92572 2000 2014 3
March 92573 3000 2014 1
March 92574 2500 2014 2
March 92575 3750 2014 3
February 92576 2000 2014 1
February 92577 2500 2014 2
February 92578 1450 2014 3
Run Code Online (Sandbox Code Playgroud)
我希望我的目标表看起来像这样:
ea_month id amount ea_year circle_id cum_amt
February 92576 1000 2014 1 1000
March 92573 3000 2014 1 4000
April 92570 2000 2014 1 6000
February 92577 3000 2014 …Run Code Online (Sandbox Code Playgroud) sql postgresql analytic-functions cumulative-sum window-functions
我有一个由其他人编写的SQL查询,我正在试图找出它的作用.有人可以解释这里Partition By和Row_Number关键字的作用,并给出一个简单的实例,以及为什么要使用它?
分区示例:
(SELECT cdt.*,
ROW_NUMBER ()
OVER (PARTITION BY cdt.country_code, cdt.account, cdt.currency
ORDER BY cdt.country_code, cdt.account, cdt.currency)
seq_no
FROM CUSTOMER_DETAILS cdt);
Run Code Online (Sandbox Code Playgroud)
我在网上看过一些例子,它们有点太深入了.
提前致谢!
我们假设我提取了一些数据集.
即
SELECT A, date
FROM table
Run Code Online (Sandbox Code Playgroud)
我想要的是具有最大日期的记录(对于A的每个值).我可以写
SELECT A, col_date
FROM TABLENAME t_ext
WHERE col_date = (SELECT MAX (col_date)
FROM TABLENAME t_in
WHERE t_in.A = t_ext.A)
Run Code Online (Sandbox Code Playgroud)
但是我的查询真的很长...有一种最简洁的方法使用ANALYTICAL FUNCTION做同样的事情吗?
我正在处理一些当前以1分钟为间隔存储的数据,如下所示:
CREATE TABLE #MinuteData
(
[Id] INT ,
[MinuteBar] DATETIME ,
[Open] NUMERIC(12, 6) ,
[High] NUMERIC(12, 6) ,
[Low] NUMERIC(12, 6) ,
[Close] NUMERIC(12, 6)
);
INSERT INTO #MinuteData
( [Id], [MinuteBar], [Open], [High], [Low], [Close] )
VALUES ( 1, '2015-01-01 17:00:00', 1.557870, 1.557880, 1.557870, 1.557880 ),
( 2, '2015-01-01 17:01:00', 1.557900, 1.557900, 1.557880, 1.557880 ),
( 3, '2015-01-01 17:02:00', 1.557960, 1.558070, 1.557960, 1.558040 ),
( 4, '2015-01-01 17:03:00', 1.558080, 1.558100, 1.558040, 1.558050 ),
( 5, '2015-01-01 17:04:00', 1.558050, …Run Code Online (Sandbox Code Playgroud) sql-server group-by aggregate-functions analytic-functions sql-server-2014
我有以下数据,由A值MM(按月)排序.
该B列GREATEST(current value of A + previous value of B, 0)以类似电子表格的方式计算.
如何B使用SQL查询进行计算?
我使用的是Oracle 10g,因此我无法使用递归查询.
这是我的测试数据:
MM | A | B
-----------+--------+------
2012-01-01 | 800 | 800
2012-02-01 | 1900 | 2700
2012-03-01 | 1750 | 4450
2012-04-01 | -20000 | 0
2012-05-01 | 900 | 900
2012-06-01 | 3900 | 4800
2012-07-01 | -2600 | 2200
2012-08-01 | -2600 | 0
2012-09-01 | …Run Code Online (Sandbox Code Playgroud) 我用Oracle编写了一个复杂的SQL查询,我想在同一个分区上使用两个解析函数.
让我们很简单,但不要太多:
SELECT col1,
MAX(col2) OVER(PARTITION BY col3, col4, col5, col6,
CASE WHEN col7 LIKE 'foo'
THEN SUBSTR(col7,1,5)
ELSE col7
END
ORDER BY col5 ASC, col6 DESC),
MIN(col2) OVER(PARTITION BY col3, col4, col5, col6,
CASE WHEN col7 LIKE 'foo'
THEN SUBSTR(col7,1,5)
ELSE col7
END
ORDER BY col5 ASC, col6 DESC)
FROM my_table;
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的语法来分解该PARTITION BY条款?
谢谢.
我正在编写一个查询来从Oracle仓库中获取记录.它是一个简单的Select Query,在几个表上有连接,我有很少的列要聚合.因此,我最终在其余列上使用Groupby.
假设我正在挑选大约10列,其中5列是聚合列.所以我需要在其他5列上分组.我甚至可以通过不执行Groupby并在我想要派生的每个聚合列上使用over(paritition by)子句来实现相同目的.
我不确定哪个更适合仓库或一般.
这个特殊情况是从一个例子中提炼出来的,程序员认为,对于两辆货车进入油罐车,首先要装载#1号线.我更正了这个以允许以任何顺序执行加载 - 但是,我发现MIN() OVER (PARTITION BY)允许ORDER BY在Oracle中(这在SQL Server中是不允许的),此外,它改变了函数的行为,导致ORDER BY显然是加入了PARTITION BY.
WITH data AS (
SELECT 1 AS SHIPMENT_ID, 1 AS LINE_NUMBER, 2 AS TARE, 3 AS GROSS FROM DUAL
UNION ALL
SELECT 1 AS SHIPMENT_ID, 2 AS LINE_NUMBER, 1 AS TARE, 2 AS GROSS FROM DUAL
)
SELECT MIN(tare) OVER (PARTITION BY shipment_id) first_tare
,MAX(gross) OVER (PARTITION BY shipment_id) last_gross
,FIRST_VALUE(tare) OVER (PARTITION BY shipment_id ORDER BY LINE_NUMBER) first_tare_incorrect
,FIRST_VALUE(gross) OVER (PARTITION …Run Code Online (Sandbox Code Playgroud) sql ×7
oracle ×6
sql-server ×3
date ×1
group-by ×1
max ×1
mysql ×1
oracle10g ×1
partition ×1
postgresql ×1
row-number ×1
t-sql ×1