[英]Simple data, Complex query on SQL Server
I need to make a query over an SQL Server table but I don't know exactly how. 我需要对SQL Server表进行查询,但我不确切知道如何查询。
Consider this table (the real table is much more complex, Ord1 and Ord2 are dates that could be null, but i simplified it to this case): 考虑一下这个表(真正的表格要复杂得多,Ord1和Ord2是可以为null的日期,但我将其简化为这种情况):
Data of MyTable 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
I need records for specific MaqID in Specific Order. 我需要特定订单中特定MaqID的记录。 I get that with this Query: 我用这个查询得到了:
SELECT * FROM myTable WHERE MaqID=144 ORDER BY MaqID, Order1 DESC, Order2
Wich give me: 我给了我:
ID MaqID Ord1 Ord2
------------------------
6 144 4 2
1 144 4 3
4 144 3 5
2 144 2 1
8 144 2 3
Now, I need a single query that, for each MaqID, return the first ID for each subquery following above order. 现在,我需要一个查询,对于每个MaqID,按照上面的顺序返回每个子查询的第一个ID。 The result should be: 结果应该是:
Expected result 预期结果
MaqID ID
-----------
144 6
12 5
I have already try distinct conbination of TOP a MAX, but TOP result only one result and i need one for each MaqID, and for Max I have not field to maximize. 我已经尝试了TOP a MAX的明显组合,但TOP只产生了一个结果,我需要一个每个MaqID,而对于Max我没有字段来最大化。
To sumarize: I need the first ID for each MaqID from a subquery in a specific order 为了sumarize:我需要从特定顺序的子查询中获取每个MaqID的第一个ID
Any ideas? 有任何想法吗? Thanks! 谢谢!
You can do this using row_number()
: 你可以使用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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.