0

我想通过使用以下查询来获取RANK。我 不知道我到底在哪里。 任何人都可以帮助我吗?没有得到Rank()分区的适当等级按DateTime

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

+0

添加tblMAEH表的数据。 – 2014-10-30 10:27:54

+0

其实输出中有什么问题。你需要什么产出? – 2014-10-31 07:24:53

+0

即使有你的例子,我也没有太多的东西想要弄清你想要达到的目标。你可以尝试编辑这个问题,并告诉我们你想要做什么,以及*期望的输出是什么? – 2014-10-31 07:27:08

回答

0

由于日期时间的毫秒部分的排名并没有为所有标有红色标记的选择行获得1。

即用于ex.for ID 8630的RDTime值是2014年10月20日14时38分13秒

可能的RDTime字段的实际值是2014年10月20日14:38:13.000 和用于下一行的毫秒部分是不同的。所以四行的排名不一样。

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

+0

找出你所建议的等级,面对同样问题 – user1990383 2014-10-30 10:09:08

+0

请在我的问题中看到。在上面的查询中添加了屏幕截图 – user1990383 2014-10-31 06:13:42

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 
+0

,当我更改日期时,即使强硬排名仍然为1,所有记录 – user1990383 2014-10-31 05:46:44

+0

然后显示有效示例!!显示不同日期的例子,然后vl帮助你.. – 2014-10-31 06:00:45

+0

请参阅我的问题。添加屏幕截图 – user1990383 2014-10-31 13:47:13