没有获得Rank()Partition By DateTime的正确排名

时间:2014-10-30 09:50:13

标签: mysql sql-server-2008 sql-server-2005 sql-server-2008-r2

我正在尝试使用以下查询获取RANK。一世 不知道我到底在哪里。 有人可以帮我这个吗?

SELECT  ID,CMNo,PLat,PLon,RDTime
    ,RANK() OVER (PARTITION BY CMNo,PLat,PLon,RDTime ORDER BY RDTime) Ranks
FROM    tblMAEH WITH(NOLOCK)
WHERE   CMNo = 69
AND     RDTime BETWEEN '2014-10-19 00:00:00.000' AND '2014-10-20 23:59:59.997'

enter image description here

CREATE TABLE #test (id     INT,CMNo   INT,PLat   NUMERIC(22, 6),Plon   NUMERIC(22,     6),RDTime DATETIME)

INSERT INTO #test VALUES      (8630,69,19.08491,72.83919,'21 oct 2014 14:38:13')
INSERT INTO #test VALUES      (8631,69,19.08491,72.83919,'22 oct 2014 18:38:13')
INSERT INTO #test VALUES      (8632,69,19.08491,72.83919,'20 oct 2014 14:39:13')
INSERT INTO #test VALUES      (8633,69,19.08491,72.83919,'20 oct 2014 14:38:13')


SELECT ID,CMNo,PLat,PLon,RDTime,Rank()OVER (PARTITION BY CMNo, PLat, PLon, RDTime Order                            BY RDTime) Ranks
FROM   #test WITH(NOLOCK)
WHERE  CMNo = 69
AND RDTime BETWEEN '2014-10-19 00:00:00.000' AND '2014-10-25 23:59:59.997' 

drop table #test

enter image description here

2 个答案:

答案 0 :(得分:0)

由于日期时间的毫秒部分,所有选定的行标记为红色标记,排名不会为1。

即ex.for ID 8630,RDTime值为2014年10月20日14:38:13

RDTime字段的实际值可能是2014年10月20日14:38:13.000 对于下一行,毫秒部分是不同的。因此,对于所有四行,排名并不相同。

因此,请删除RDTime字段的毫秒部分,然后尝试重新查询相同的SQL。

答案 1 :(得分:0)

我不知道你是如何得到那个输出的。我在你的问题中运行了相同的查询,但我没有得到那个输出。除非你使用row_number(),否则你不会得到那个输出。检查一下。

CREATE TABLE test
  (id     INT,CMNo   INT,PLat   NUMERIC(22, 6),Plon   NUMERIC(22, 6),RDTime DATETIME)

INSERT INTO #test
VALUES      (8630,69,19.08491,72.83919,'20 oct 2014 14:38:13'),
            (8631,69,19.08491,72.83919,'20 oct 2014 14:39:13'),
            (8632,69,19.08491,72.83919,'21 oct 2014 14:38:13'),
            (8633,69,19.08491,72.83919,'22 oct 2014 14:38:13')

SELECT ID,CMNo,PLat,PLon,RDTime,
       Rank()OVER (PARTITION BY CMNo, PLat, PLon
           ORDER BY RDTime) Ranks
FROM   #test
WHERE  CMNo = 69 

ID      CMNo    PLat        PLon        RDTime                  Ranks
----    ----    ---------   ---------   ----------------------- ----- 
8630    69      19.084910   72.839190   2014-10-20 14:38:13.000 1
8631    69      19.084910   72.839190   2014-10-20 14:39:13.000 2
8632    69      19.084910   72.839190   2014-10-21 14:38:13.000 3
8633    69      19.084910   72.839190   2014-10-22 14:38:13.000 4