我需要对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
有什么想法吗?谢谢!
答案 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;