查找与表中当前行匹配的前一行

时间:2016-04-20 09:54:37

标签: mysql r matlab

我有一个篮球数据集,其中A列代表不同的球队。是否有一种很好的方法来提取该数据集中的最后几行,其中A列匹配" The Warriors"比如说?

我在这里的意思是我想找到当前A行之前的最后3行,其中A列表示" The Warriors"例如。我将如何在R(或SQL或Matlab)中执行此操作?

1 个答案:

答案 0 :(得分:1)

我可以在Matlab中提出一个解决方案。

让我首先创建一个带有单列A的随机表,只是为了演示:

T = 

          A       
    ______________

    'The Warriors'
    '43'          
    '38'          
    '40'          
    '49'          
    '71'          
    '69'          
    '64'          
    '67'          
    'The Warriors'
    'The Warriors'
    'The Warriors'
    '131'         
    'The Warriors'
    '119'         
    '124'         
    '93'          
    '109'         
    '77'          
    'The Warriors'
    '83'          
    '117'         
    '75'          
    '122'         
    '80'          
    'Smith'       
    'Johnson'     
    'Williams'    
    'Jones'       
    'Brown' 

现在可以创建一个布尔向量,如果第i行包含字符串true,则在i位置包含'The Warriors'(1):

matchresult=cellfun(@(x) strcmp(x,'The Warriors'),T.A);

确实现在matchresult的格式为:

matchresult =

     1
     0
     0
     0
     0
     0
     0
     0
     0
     1
     1
     1
     0
     1
     0
     0
     0
     0
     0
     1
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

现在我们可以扫描这个向量而不是整个表来查找最后3行:

for i=4:length(matchresult)                 % since we want 3 rows we can start scanning from the 4th
    if(sum(matchresult(1:i-1))>=3)          % if there are at least 3 ones in previous rows
        fprintf('Scanning row #%d:\n',i);   % see the row index we're scanning
        find(matchresult((1:i-1)),3,'last') % find 1s in previous rows and display last 3 indices
    end
end