当连续序列被破坏时,如何创建一个从 1 重新开始的排名?
(点击下面的图片)
下表展示了用户的流程。他的总旅程由 8 个步骤组成,页面指示他在每个步骤中所处的页面。我想创建一个排名,当页面更改时该排名会重置。棘手的部分是让排名(第 6 页,第 1 页)重置为 1,而不是在第 4 页继续。按页面分区是不够的,因为我希望当用户更改回第 1 页并继续时重新启动排名。该表包含我想要实现的结果,我只是不知道如何在 Postgres 中做到这一点。
我是一个 SQL 菜鸟,我需要有关如何使用 SET 命令来分配 SortOrder 列的值的语法帮助。下面的代码不会更新表格,但它是我希望的样子(所有 SortOrder 值都设置为 0)。我可以手动进行,但寻找一种快速的替代方案(数据集有点大)。
Select ROW_NUMBER() OVER (ORDER BY Name ASC) AS SortOrder, Name
From DesignColours
SortOrder |Name
1 Beige
2 Black
3 Blue
4 Brown
5 Copper
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
我有一个存储过程,它接受一个 NVARCHAR(max) 字符串,该字符串是我需要在将其加载到实时表之前验证的 JSON 数据。如果验证失败,我需要返回带有问题和错误数据行的行号的消息。这些行没有在 JSON 字符串中分配编号,但由它们在字符串中的存储顺序暗示。我正在尝试在 OPENJSON 函数期间分配一个增量编号。
使用 XML 时,我可以这样做:
SELECT ROW_NUMBER() OVER (ORDER BY item) AS rowOrder
, item.value('(./Id/text())[1]', 'bigInt') AS EId
, item.value('(./Name/text())[1]', 'nvarchar(255)') AS EName
, item.value('(./Number/text())[1]', 'nvarchar(30)') AS ENumber
FROM @ERow.nodes('/variable/item') AS main(item);
Run Code Online (Sandbox Code Playgroud)
派生它,但该技术不适用于 OPENJSON
如果可能的话,我宁愿不分两次进行 - 即将数据加载到临时表中,然后使用行号更新临时表中的行
SELECT ROW_NUMBER() OVER () AS rownum
, newColumnName
, decimal_column
, nvarchar_column
FROM OPENJSON(@JSON_String)
WITH (
newColumnName BIGINT '$.id_column',
decimal_column DEC(28,8),
nvarchar_column NVARCHAR(30)
)
Run Code Online (Sandbox Code Playgroud)
以为这会奏效,但没有运气。
我遇到了与此问题非常相似的问题 T-sql Reset Row number on Field Change
这个问题的解决方案很完美,效果很好。除非我尝试使用多个其他“custno”,否则它会崩溃。
我的意思是:
custno moddate who
--------------------------------------------------
581827 2012-11-08 08:38:00.000 EMSZC14
581827 2012-11-08 08:41:10.000 EMSZC14
581827 2012-11-08 08:53:46.000 EMSZC14
581827 2012-11-08 08:57:04.000 EMSZC14
581827 2012-11-08 08:58:35.000 EMSZC14
581827 2012-11-08 08:59:13.000 EMSZC14
581827 2012-11-08 09:00:06.000 EMSZC14
581827 2012-11-08 09:04:39.000 EMSZC49 Reset row number to 1
581827 2012-11-08 09:05:04.000 EMSZC49
581827 2012-11-08 09:06:32.000 EMSZC49
581827 2012-11-08 09:12:03.000 EMSZC49
581827 2012-11-08 09:12:38.000 EMSZC49
581827 2012-11-08 09:14:18.000 EMSZC49
581827 2012-11-08 09:17:35.000 EMSZC14 Reset row number to 1 …Run Code Online (Sandbox Code Playgroud) 我对 Spark 和 SQL 还很陌生。我正在尝试向我的 df 添加一列(然后将其保存到 Delta 表),该列为每个记录/行提供唯一的 id,并在每次更新特定记录时递增它。
我试图执行以下操作:
SELECT etc,
CONCAT(somerows1) as id1,
ROW_NUMBER() OVER(PARTITION BY somerows1 ORDER BY (SELECT NULL)) AS versionid
FROM etc
Run Code Online (Sandbox Code Playgroud)
somerows1 是几列的串联,以形成唯一的记录。我对以特定形式排序的记录没有特别的兴趣,这就是我选择 ORDER BY (SELECT NULL) 的原因。
我收到以下错误:
Error in SQL statement: AnalysisException: Non-time-based windows are not supported on streaming DataFrames/Datasets; line 1 pos 0;
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
谢谢
sql row-number sql-order-by spark-streaming apache-spark-sql
警告:#1287 在表达式中设置用户变量已被弃用,并将在未来版本中删除。考虑替代方案:“SET 变量 = 表达式,...”或“SELECT 表达式 INTO 变量”。
这是 MySQL 8.0.21 吐出的内容。该代码可以工作......但我也需要它在未来的版本中工作......所以我的问题是这个警告的正确方法是什么?
我需要将一个变量设置为某个数字(我将通过行的 ID 获得该数字)。我需要在每个 SET 语句中将其加 1。
我应该如何更改此代码以使警告消失?
SET @fromorder = (SELECT `order` FROM forms WHERE id=5);
/* SET @fromorder = 4; - so this is the same in the example below */
UPDATE forms SET `order` = @fromorder := @fromorder + 1 WHERE `order` > -1 and `order` <= 4 ORDER BY `order` ASC;
SET @fromorder = null;
Run Code Online (Sandbox Code Playgroud)
据我了解,问题的根源在于:
`order` = @fromorder := @fromorder + 1
Run Code Online (Sandbox Code Playgroud)
我想这需要改变吗?
所以由此可知: …
我需要使用以下查询向用户活动添加计数器:
select PERSON_ID, TIMESTAMP,
row_number() over (partition by PERSON_ID order by TIMESTAMP asc) as PERSON_COUNTER
from table1;
Run Code Online (Sandbox Code Playgroud)
这很有效,但它也会计算 PERSON_ID 为 null 的情况,并分配计数器,就好像 null 是用户名一样。我想要的是在这些情况下计数器为空 - 有什么想法吗?
我想在numpy中加载一个表,以便第一行和第一列被视为文本标签.相当于这个R代码的东西:
read.table("filename.txt", row.header=T)
Run Code Online (Sandbox Code Playgroud)
文件是分隔的文本文件,如下所示:
A B C D
X 5 4 3 2
Y 1 0 9 9
Z 8 7 6 5
Run Code Online (Sandbox Code Playgroud)
因此,读入我将有一个数组:
[[5,4,3,2],
[1,0,9,9],
[8,7,6,5]]
Run Code Online (Sandbox Code Playgroud)
某种:rownames ["X","Y","Z"] colnames ["A","B","C","D"]
有没有这样的阶级/机制?
我们在MS Access中有ROW_NUMBER函数吗?如果它有,那么请让我知道它的任何语法,因为我被困在这里.我试过论坛,但我得到了sql server语法.以下是我的查询:
select
ROW_NUMBER() OVER (ORDER BY t.TID) AS uni ,
t.TSource as [Source],
t.TText as [Text],
u.Name as [UserId],
u.Image_Url as [ImageFilePath],
from table1 t inner join table2 u on t.UserId = u.UIds
Run Code Online (Sandbox Code Playgroud)
但它给出了语法错误.
我的表中有以下数据,
COL1 COL2
A X
A Y
A Z
B W
B W
C L
C L
Run Code Online (Sandbox Code Playgroud)
我想用一个额外的标志来获取上面的数据,例如,对于唯一列值,flag应为1,第一次出现的重复应为1,剩余的重复行为0,预期输出:
COL1 COL2 FLAG
A X 1
A Y 1
A Z 1
B W 1 -- First occurance
B W 0 -- Second occurance
C L 1 -- First occurance
C L 0 -- Second occurance
Run Code Online (Sandbox Code Playgroud)
我知道row_number()over(由COL1,COL2分区)将返回如下所示的计数,
COL1 COL2 FLAG
A X 1
A Y 1
A Z 1
B W 2
B W 2
C L 3
C L 3
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.第二次出现的相同列值应该归为0 …
row-number ×10
sql ×5
sql-server ×3
sql-order-by ×2
duplicates ×1
header ×1
indices ×1
json ×1
lag ×1
ms-access ×1
mysql ×1
null ×1
numpy ×1
open-json ×1
oracle ×1
partition-by ×1
postgresql ×1
python ×1
ranking ×1
snowflake-cloud-data-platform ×1
sql-update ×1