2014-11-25 25 views
2

我有一张gr_no,year_dob,family_id等的表。 我想根据family_id排名出生年份,并且无法生成siblings_rank结果。如何根据出生组别和出生年份获得排名

+----------+--------------+-----------+ 
| gr_no | year_dob  | family_id | siblings_rank 
+----------+--------------+-----------+ 
|  1001 | 1992   | 95  | 1 
| 10234 | 1995   | 95  | 2 
| 10236 | 2004   | 96  | 1 
| 15568 | 2006   | 96  | 2 
|  1225 | 2004   | 92  | 1 
+----------+--------------+-----------+ 

此查询工作:

SET @prev := null; 

SET @cnt := 1; 

SELECT gr_no, gs_id, gf_id, year_dob, IF(@prev <> gf_id, @cnt := 1, @cnt := @cnt + 1) AS siblings_position, @prev := gf_id as previous_gf_id 
FROM student_registered 
ORDER BY gf_id, year_dob asc 

该查询也在努力:

SELECT gr_no, gs_id, gf_id, year_dob, IF(@prev <> gf_id, @cnt := 1, @cnt := @cnt + 1) AS siblings_position, @prev := gf_id as previous_gf_id 
FROM student_registered 
JOIN (SELECT @prev := null) p 
JOIN (SELECT @cnt := 1) c 
ORDER BY gf_id, year_dob asc 

...............我不能用这些查询创建视图?

或 如果一个过程可以根据查询更新student_registered列'siblings_position'?

回答

0

视图

在这里你不能使用SQL变量是另一种方式使用相关子查询

SELECT gr_no, family_id,year_dob, 
     (select count(*) from Table1 T1 
     where T1.family_id = T.family_id 
     and T1.year_dob <= T.year_dob) as siblings_position 
FROM Table1 T 
ORDER BY family_id, year_dob asc 
+0

共记录6019和此查询SELECT gr_no,gs_id得到同样的结果,year_dob, gf_id, (SELECT COUNT(*)FROM T1 student_registered其中 = T1.gf_id T.gf_id 和T1.year_dob <= T.year_dob)作为siblings_position FROM student_registeredŤ ORDER BY gf_id,year_dob ASC为返回25个结果 – 2014-11-25 05:00:09

+0

@atif Naseem,子查询不会限制行,位置可能会像25一样,你能证实吗?试一下子查询,看看? – radar 2014-11-25 13:03:58

+0

@AtifNaseem,它工作? – radar 2014-12-01 03:40:57