简单数据,SQL Server上的复杂查询

时间:2014-04-23 18:50:04

标签: sql sql-server

我需要对SQL Server表进行查询,但我不确切知道如何。

考虑这个表(真正的表格要复杂得多,Ord1和Ord2是可以为空的日期,但我简化为这种情况):

MyTable数据

ID  MaqID   Ord1    Ord2 
------------------------
1   144     4       3 
2   144     2       1 
3   12      2       3 
4   144     3       5 
5   12      3       1
6   144     4       2 
7   12      2       4 
8   144     2       3 
9   12      1       5 
10  12      3       2

我需要特定订单中特定MaqID的记录。我用这个查询得到了:

SELECT * FROM myTable WHERE MaqID=144 ORDER BY MaqID, Order1 DESC, Order2

我能给我:

ID  MaqID   Ord1    Ord2
------------------------
6   144     4       2
1   144     4       3
4   144     3       5
2   144     2       1
8   144     2       3

现在,我需要一个查询,对于每个MaqID,按照上面的顺序返回每个子查询的第一个ID。结果应该是:

预期结果

MaqID    ID
-----------
144      6
12       5

我已经尝试了TOP a MAX的明显组合,但TOP只产生了一个结果,我需要每个MaqID一个,而对于Max我没有字段来最大化。

要sumarize:我需要按特定顺序从子查询中获取每个MaqID的第一个ID

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用row_number()

执行此操作
select t.*
from (select t.*,
             row_number() over (partition by macid Order1 DESC, Order2) as seqnum
      from mytable t
     ) t
where seqnum = 1;