MySQL:每个唯一日期的行计数器

时间:2015-03-23 15:25:31

标签: mysql

我有一个格式如下的表格

Date        | Text_Field
2014/12/03  | Hi
2014/12/03  | Hello
2014/12/03  | Bye
2014/12/03  | Ok
2014/12/03  | Yes
2014/12/04  | When 
2014/12/04  | Blah

我想让表格显示为

Date | Text_Field
1    | Hi
1    | Hello
1    | Bye
1    | Ok
1    | Yes
2    | When 
2    | Blah

此处行值将在日期更改后更改。我知道我应该在查询中的某处使用SELECT @row := @row + 1 FROM (row := 0) t。但是,我不确定如何将日期的唯一性作为计数器的条件。这在MySQL中可行吗?如果是这样,我该怎么办呢? 任何提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

在其他RDBMS中,通过使用Mysql的窗口函数更容易实现这种结果。如果没有这些函数,您可以使用用户定义的变量,一个变量将检测日期的变化,另一个变量将增加计数器

 SELECT t.row_num,t.Text_Field
FROM (
SELECT *,
@r:= CASE WHEN @g = `Date` THEN @r  ELSE @r + 1 END row_num,
@g:= `Date`
FROM your_table 
CROSS JOIN(SELECT @g:= NULL,@r:=0) a
ORDER BY `Date`  
) t 
  

注意ORDER BY Date对于获得相同的序列非常重要   没有。重复日期

Demo