SQL查詢每組第一條數據記錄


問題描述如下:

有一些program,每個program可能暫時無聯系人,有一個聯系人或不止一個聯系人。需要找出每個program的一個聯系人即可(沒有則空)。即:SQL查詢每組的第一條數據記錄。

 

測試表如下:

create table test
(
    program_id int,
    person_id int
);

insert test
select     1,1
union select    1,2
union select     2,3
union select     2,4

 

解決方案如下:

select
    program_id,
    person_id    
from
    test as a
where
    a.person_id in 
    (
        select
            top 1
            person_id
        from
            test
        where
            program_id = a.program_id
    )

 

執行計划如下:

Filter & Nested Loops中的Actual Number of Rows為2。

 

SQL的執行概括如下:

1)掃描test as a。提出一條記錄。

2)  掃描test,提出與上述記錄program_id相同的記錄。

3)  提出這些記錄中的top 1。

4)轉到1)中,提下一條記錄。

a = test;
b = test;
result;
for (int i = 0; i < a.rows_number; i++)
{
  for (int j = 0; j < b.rows_number; j++)
  {
    temp;
    if ( b.program_id == a.program_id )
      temp.add();
    result.add(temp.first());
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM