标签: analytic-functions

Where子句中的SQL Row_Number()函数

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)

sql t-sql sql-server analytic-functions

86
推荐指数
7
解决办法
21万
查看次数

MySQL在ORDER BY中获取行位置

使用以下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中的行,但是为一行加载一个可能很大的结果集似乎很浪费.

mysql sql analytic-functions

77
推荐指数
4
解决办法
8万
查看次数

计算PostgreSQL中的累积和

我想找到累积或运行的字段数量,并将其从分段插入表格.我的暂存结构是这样的:

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

62
推荐指数
1
解决办法
6万
查看次数

Oracle'Partition By'和'Row_Number'关键字

我有一个由其他人编写的SQL查询,我正在试图找出它的作用.有人可以解释这里Partition ByRow_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)

我在网上看过一些例子,它们有点太深入了.

提前致谢!

sql oracle row-number analytic-functions partition

43
推荐指数
3
解决办法
26万
查看次数

Oracle:以最大日期记录

我们假设我提取了一些数据集.

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做同样的事情吗?

oracle date max analytic-functions

26
推荐指数
3
解决办法
15万
查看次数

将GROUP BY与FIRST_VALUE和LAST_VALUE一起使用

我正在处理一些当前以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

14
推荐指数
1
解决办法
2万
查看次数

Oracle SQL Analytic查询 - 递归电子表格式运行总计

我有以下数据,由AMM(按月)排序.

BGREATEST(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)

sql oracle running-total recursive-query analytic-functions

13
推荐指数
2
解决办法
1万
查看次数

Oracle Analytic函数 - 如何重用PARTITION BY子句?

我用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 analytic-functions

8
推荐指数
2
解决办法
2万
查看次数

在Oracle中分组vs分区

我正在编写一个查询来从Oracle仓库中获取记录.它是一个简单的Select Query,在几个表上有连接,我有很少的列要聚合.因此,我最终在其余列上使用Groupby.

假设我正在挑选大约10列,其中5列是聚合列.所以我需要在其他5列上分组.我甚至可以通过不执行Groupby并在我想要派生的每个聚合列上使用over(paritition by)子句来实现相同目的.

我不确定哪个更适合仓库或一般.

sql oracle data-warehouse analytic-functions

8
推荐指数
2
解决办法
3万
查看次数

Oracle MIN作为分析函数 - 使用ORDER 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 sql-server oracle analytic-functions oracle10g

8
推荐指数
1
解决办法
1万
查看次数