2016-05-17 84 views
-3

请帮我这个具体的查询。SQL Server SELECT排名()和数据分组

这里是我的示例查询

with cte as 
(
select entryID,LogDateTime,logtype[logtype],batch, 
rank() over (partition by logType 
      order by logdatetime) rnk 
from Emp_TimeLog 
where cast(LogDateTime as date) = '2016-05-17' 
) select entryID,LogDateTime,logType,batch, rnk 
from cte order by LogDateTime 

这导致这样

2016-05-17 11:57:44.000 1 1 1 
2016-05-17 11:57:53.000 5 1 1 
2016-05-17 11:57:58.000 6 1 1 
2016-05-17 11:58:10.000 2 1 1 
2016-05-17 11:58:18.000 1 2 2 
2016-05-17 11:58:25.000 3 1 1 
2016-05-17 11:58:32.000 4 1 1 
2016-05-17 11:58:42.000 5 2 2 
2016-05-17 11:58:49.000 6 2 2 
2016-05-17 11:58:55.000 2 2 2 

但我想是这样的。

2016-05-17 11:57:44.000 1 1 1 
2016-05-17 11:57:53.000 5 1 1 
2016-05-17 11:57:58.000 6 1 1 
2016-05-17 11:58:10.000 2 1 1 
2016-05-17 11:58:18.000 1 2 2 
2016-05-17 11:58:25.000 3 2 2 
2016-05-17 11:58:32.000 4 2 2 
2016-05-17 11:58:42.000 5 2 2 
2016-05-17 11:58:49.000 6 2 2 
2016-05-17 11:58:55.000 2 2 2 

最后2列是BatchRank, 而第三列是logType。 它应该是按批次logType其中LogType组是1,2,3,4,5,6。 因此,对于每1个组,它是另一批次,我需要将它放在最后2列。

请帮助这一点,我怎么能做到这一点。

在此先感谢。

+0

从查询,'batch'是一个创纪录的实际值。但是你希望得到具有不同'批量'值的结果。 – ydoow

+0

请加样本数据/表 – Backs

+0

是的,我应该按照1,2,3,4,5,6批次进行分组。 在我上面的例子中, 第一批应该是1,5,6,2。 (即使不完整) 第二批应该是1,3,4,5,6,2。 我应该看看并基于第3列。 请帮忙 –

回答

-1

你只需要修复的排名顺序...为:

rank() over (partition by logType 
      order by batch) rnk 
+0

没有先生,它没有工作。我只是依靠第三列,因为最后2列应该是我想要结果的答案。 –

+0

它应该按日期和时间排序。 –

+0

您当前的代码由LogDateTime订购! –