Sql 在分区上的稠密秩()中,可以得到两个相同的顺序位置(或行号)吗?
我的问题:在哪种情况/条件下,我下面的代码将返回两个相同的行,两个行的顺序_POSITION=1 不幸的是,我无法重现我的问题,但早些时候我正在处理一个生产问题,其中我的查询返回了重复的问题。这是两条相同的记录,两条记录的顺序_POSITION=1。这怎么可能呢?即使所有列都相同,这是否应该返回两个具有不同顺序位置的相同行?(行号)Sql 在分区上的稠密秩()中,可以得到两个相同的顺序位置(或行号)吗?,sql,sql-server,sql-server-2016,common-table-expression,Sql,Sql Server,Sql Server 2016,Common Table Expression,我的问题:在哪种情况/条件下,我下面的代码将返回两个相同的行,两个行的顺序_POSITION=1 不幸的是,我无法重现我的问题,但早些时候我正在处理一个生产问题,其中我的查询返回了重复的问题。这是两条相同的记录,两条记录的顺序_POSITION=1。这怎么可能呢?即使所有列都相同,这是否应该返回两个具有不同顺序位置的相同行?(行号) 如果两行具有相同的a.name、a.ORDER\u DATE和a.ORDER\u TIME,则densite\u rank将为它们提供相同的编号 densite\u
如果两行具有相同的
a.name
、a.ORDER\u DATE
和a.ORDER\u TIME
,则densite\u rank
将为它们提供相同的编号
densite\u rank
使用partition by
子句中提到的列对行进行分组,并尝试使用order by
子句中的列对行进行编号。但是,如果同一组中的两行在order by
子句中使用的列中具有相同的值,则会为它们提供相同的数字
如果需要不同的编号,则使用行编号
而不是密集排列
密集排列()
将返回相同的值,例如,如果在同一A.Name
中,多条记录的订单日期
和订单时间
值相同,则使用行编号
您可能想使用行编号()
为重复的案例生成唯一的编号
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