我正在尝试使用以下查询获取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'
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
答案 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