Azure/U-SQL - ROW_NUMBER() 中的 ORDER BY

标签 azure row-number u-sql

我正在构建一个包含多个中间表的 U-SQL 脚本。我想根据其中一列的顺序分配 ROW_NUMBER(),但不知道如何执行此操作。

@t = SELECT *
     FROM(
        VALUES
        ( 1, "2010-01-01","TagName1", 30 ),
        ( 2, "2010-01-01","TagName2", 5 ),
        ( 2, "2010-01-02","TagName2", 7 ),
        ( 2, "2010-01-02","TagName3", 6 ),
        ( 3, "2010-01-03","TagName2", 15 ),
        ( 1, "2010-01-01","TagName2", 2 ),
        ( 1, "2010-01-01","TagName3", 1),
        ( 3, "2010-01-04","TagName1", 2 ),
        ( 3, "2010-01-04","TagName2", 4 )
     ) AS T(DeviceID, Date, TagName, dv);

@t2 = SELECT DISTINCT(dv) as dv
             , ROW_NUMBER() OVER() as LevelNumber
      FROM @t
      ORDER BY dv;

如果我运行上面的代码,它会告诉我将 ORDER BY 移动到 OUTPUT 语句,但是当表内容在后续操作中发生更改时,这不起作用.

我尝试将列名称放入 OVER() 部分,但这也不起作用。

我想要这样的东西:

  dv          LevelNumber
  1                1
  2                2      
  4                3
  5                4

有什么建议吗?

最佳答案

您可以在 OVER 子句中包含 ORDER BY 和/或 PARTITION BY 子句。您可以将 ORDER BY 子句移至 OUTPUT 语句,例如

@t = SELECT *
     FROM(
        VALUES
        ( 1, "2010-01-01","TagName1", 30 ),
        ( 2, "2010-01-01","TagName2", 5 ),
        ( 2, "2010-01-02","TagName2", 7 ),
        ( 2, "2010-01-02","TagName3", 6 ),
        ( 3, "2010-01-03","TagName2", 15 ),
        ( 1, "2010-01-01","TagName2", 2 ),
        ( 1, "2010-01-01","TagName3", 1),
        ( 3, "2010-01-04","TagName1", 2 ),
        ( 3, "2010-01-04","TagName2", 4 )
     ) AS T(DeviceID, Date, TagName, dv);


//@t2 = SELECT DISTINCT(dv) as dv
//             , ROW_NUMBER() OVER() as LevelNumber
//      FROM @t
//      ORDER BY dv;


@output =
    SELECT DeviceID,
           Date,
           TagName,
           dv,
           ROW_NUMBER() OVER( ORDER BY dv ) AS LevelNumber
    FROM @t;


OUTPUT @output TO "/output/output.csv"
ORDER BY dv
USING Outputters.Csv();

我能得到的最接近你的结果是通过这个查询,但你需要的逻辑对我来说并不是 100% 清楚:

@output =
    SELECT dv,
           ROW_NUMBER() OVER(ORDER BY dv) AS LevelNumber
    FROM
    (
        SELECT DISTINCT dv
        FROM @t
    ) AS x;

关于Azure/U-SQL - ROW_NUMBER() 中的 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47233281/

相关文章:

sql - 如何在 T-SQL 中编写带有 row_number 的 WHERE 子句?

azure - USQL - SQL.ARRAY 获取长度?

azure - 如何删除文本文件中引号内而非行尾的\r\n 换行符

azure - Visual Studio Ultimate 2013 在服务器资源管理器中不显示 Windows Azure 节点

Azure Api 管理 - cors 策略。无法动态地从命名值提供 <allowed-origins>

azure - 当我尝试上传 ProfileMFAPhoneNumber 的 B2C 自定义策略时,出现验证错误

sql - 仅选择单行时获取总行数

sql - 消除 SQL 2000 的 ROW_NUMBER()

c# - U-SQL 随机行样本

mysql - Azure 上 MySQL 的可扩展性