使用mysql选择继续日期的计数

时间:2016-12-29 08:55:48

标签: mysql

使用此查询

    select FROM_UNIXTIME(updates.up_day, '%Y-%m-%d') date 
       ,employees.em_name from updates 
join employees on updates.up_employeeid=employees.em_id 
join options on updates.up_optionid=options.op_id 
where employees.em_team_id=12 and  
      year(curdate()) = year(FROM_UNIXTIME(updates.up_day)) and
      MONTH(FROM_UNIXTIME(updates.up_day))= MONTH(CURDATE()) and 
      options.op_name not in ("OFF","Holiday") ;

查询已编辑

获得这样的结果

    | 2016-12-19 | Ravi  
    | 2016-12-18 | Ravi 
    | 2016-12-25 | Ravi  
    | 2016-12-26 | Ravi  
    | 2016-12-27 | Ravi  
    | 2016-12-02 | Amith             
    | 2016-12-03 | Amith 
    | 2016-12-09 | Amith 
    | 2016-12-19 | Amith
    | 2016-12-18 | Amith

但我们想要像

这样的结果
2  | Ravi 
3  | Ravi
2  | Amith
2  | Amith

请就此提出建议。

1 个答案:

答案 0 :(得分:0)

您可以使用如下查询:

SELECT mydate, myname,
       @seq := IF(@name = myname && DATEDIFF(mydate, @date) = 1, @seq + 1, 1),
       @name := myname,
       @date := mydate                 
FROM mytable
CROSS JOIN (SELECT @date := '1900-01-01', @name := '', @seq := 0) AS vars
ORDER BY myname, mydate

mytable是您的查询,用作子查询。查询使用变量来计算连续记录的等级。如果两个连续记录共享相同的名称值并且恰好有一天作为差异,则等级增加1。

注意:您应该使用嵌套条件,以便为@name@date变量赋值。为了简单起见,我把这篇文章从我的查询中删除了。

Demo here