你能在 DENSE_RANK() OVER PARTITION 中得到两个相同的 order_position(或行号)吗?
Can you get two identical order_position (or row number) in DENSE_RANK() OVER PARTITION?
我的问题:下面的代码 circumstance/condition 会 return 两个相同的行,都具有 ORDER_POSITION=1.
不幸的是,我无法重现我的问题,但早些时候我正在处理一个生产问题,其中我的查询 returning 重复。这是两个相同的记录,两者的 ORDER_POSITION=1 。这怎么可能?即使所有列都相同,这不应该是 return 两个相同的行,但订单位置不同吗? (行号)?
WITH CTE AS
(
SELECT A.Name,
A.Device,
CONVERT(DATETIME, A.ORDERDATE, 120) AS ORDER_DATE,
ORDER_TIME,
A.ORDER_BDATE,
A.ORDER_BTIME,
Product,
A.PR_ID
FROM MyTable A
WHERE
A.Product = 'GPS' AND
A.[STATUS] ='ACTIVE'
)
SELECT R.*
FROM (
SELECT A.*,
DENSE_RANK() OVER (PARTITION BY A.Name ORDER BY A.ORDER_DATE DESC, A.ORDER_TIME DESC) AS ORDER_POSITION
FROM CTE A) R
如果两行具有相同的 a.name
、A.ORDER_DATE
和 A.ORDER_TIME
,则 dense_rank
将给它们相同的数字。
Dense_rank
使用 partition by
子句中提到的列对行进行分组,并尝试使用 order by
子句中的列将数字赋予行。但是,如果同一组中的两行在 order by
子句中使用的列中具有相同的值,则会为它们提供相同的数字。
如果您想要不同的数字,请使用 row_number
而不是 dense_rank
。
DENSE_RANK()
将 return 相同的值,如果使用您的示例,ORDER_DATE
和 ORDER_TIME
的多个记录具有相同的值 A.Name
您可能想使用 ROW_NUMBER()
为重复案例生成唯一编号
我的问题:下面的代码 circumstance/condition 会 return 两个相同的行,都具有 ORDER_POSITION=1.
不幸的是,我无法重现我的问题,但早些时候我正在处理一个生产问题,其中我的查询 returning 重复。这是两个相同的记录,两者的 ORDER_POSITION=1 。这怎么可能?即使所有列都相同,这不应该是 return 两个相同的行,但订单位置不同吗? (行号)?
WITH CTE AS
(
SELECT A.Name,
A.Device,
CONVERT(DATETIME, A.ORDERDATE, 120) AS ORDER_DATE,
ORDER_TIME,
A.ORDER_BDATE,
A.ORDER_BTIME,
Product,
A.PR_ID
FROM MyTable A
WHERE
A.Product = 'GPS' AND
A.[STATUS] ='ACTIVE'
)
SELECT R.*
FROM (
SELECT A.*,
DENSE_RANK() OVER (PARTITION BY A.Name ORDER BY A.ORDER_DATE DESC, A.ORDER_TIME DESC) AS ORDER_POSITION
FROM CTE A) R
如果两行具有相同的 a.name
、A.ORDER_DATE
和 A.ORDER_TIME
,则 dense_rank
将给它们相同的数字。
Dense_rank
使用 partition by
子句中提到的列对行进行分组,并尝试使用 order by
子句中的列将数字赋予行。但是,如果同一组中的两行在 order by
子句中使用的列中具有相同的值,则会为它们提供相同的数字。
如果您想要不同的数字,请使用 row_number
而不是 dense_rank
。
DENSE_RANK()
将 return 相同的值,如果使用您的示例,ORDER_DATE
和 ORDER_TIME
的多个记录具有相同的值 A.Name
您可能想使用 ROW_NUMBER()
为重复案例生成唯一编号