2016-06-28 126 views
-1

你好我有我想要显示从每个部分各自的候选人只有第一个问题学生数据...显示问题

+0

你能告诉我们你查询的结果,至少前10 – KaeL

+1

我不会回答这个问题,因为努力需要使用字符串函数大大超过了你就必须努力操纵'status'列以发挥标准化您的表格,并有部分和问题ID号作为单独的列。 –

+1

您的'SUBSTRING()'尝试将不起作用,因为数字的宽度是可变的。你将不得不使用'INSTR'和'SUBSTRING'的组合,这会变得非常快。 –

回答

1

解决方案模仿SQL SERVER Row_Number()函数。谷歌MySQL的顺序点在正确的方向。

/*create temporary table t(can_id int, status varchar(20)); 

insert into t values    
(001 , 'section 1 question 1'),  
(001 , 'section 1 question 2'), 
(001 , 'section 1 question 3'), 
(001 , 'section 1 question 4'),  
(001 , 'section 2 question 1'),  
(001 , 'section 2 question 2'),  
(001 , 'section 2 question 3'),  
(001 , 'section 2 question 4'),  
(001 , 'section 3 question 1'),  
(001 , 'section 3 question 2'),  
(001 , 'section 3 question 3'),  
(002 , 'section 1 question 1'), 
(002 , 'section 1 question 2'), 
(002 , 'section 1 question 3'), 
(002 , 'section 2 question 1'), 
(002 , 'section 2 question 2'), 
(002 , 'section 2 question 3'), 
(002 , 'section 3 question 1'), 
(002 , 'section 3 question 2'), 
(002 , 'section 3 question 3'), 
(002 , 'section 3 question 4'); 

*/ 

select s.tcanid as 'can.id', substring(s.tstatus,11,11) as Question 
from 
(
select t.can_id as tcanid, t.status as tstatus , 
      @sno :=if(@previd = concat(t.can_id,substring(t.status,1,9)),@sno + 1,1) as canid 
      ,@previd:=concat(t.can_id,substring(t.status,1,9)) prevcanid 
from t, 
(select @sno:= 0) as sn 
,(select @Previd:= '') as p 
) s 
where s.canid <= 3 
+0

您的查询与我的查询不太相同 - 请尝试将别名重新放入并更正where语句,它应该查看sno的别名 –

0

根据您的要求,你要为每一个部分的第一个3个问题,但你没有考虑部分在你的查询中。以下查询将完成这项工作。

SELECT data_set.* 
FROM 
(

    SELECT temp.can_id 
      , temp.Section 
      , temp.Question 
      , ROW_NUMBER() OVER (PARTITION BY temp.can_id,temp.Section ORDER BY temp.can.id,temp.Section) as QUESTION_NO 
    FROM 
    (
     SELECT can.id as can_id 
       , SUBSTRING(status,11,11) as Question 
       , SUBSTRING(status,1,9) as Section 
     FROM samp_dat 
    ) temp 
) data_set 
WHERE 
    data_set.QUESTION_NO <=3 
+0

虽然Mysql没有ROW_NUMBER()函数 - 正确的想法。 –