zoukankan      html  css  js  c++  java
  • 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());
      }
    }
  • 相关阅读:
    回到顶部
    侧边横幅特效
    中部导航吸顶
    scroll
    层次化索引MultiIndex
    pandas处理缺失值df.dropna( )的thresh参数
    pd.Index(ser2).get_indexer(ser1),返回ser1中各元素在ser2中的索引位置
    FutureWarning
    数据框索引行
    对字典dict使用最大值函数max
  • 原文地址:https://www.cnblogs.com/jiejue/p/2835513.html
Copyright © 2011-2022 走看看