简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM