2012-08-03 207 views
3

我有一个表,例如每个组包含五行。每个组中的每一行都拥有该组别唯一的date值。当数值发生变化时,MySQL增加用户变量

我想在我的查询中执行的操作是遍历表,并在此date值更改时递增用户变量(@count)。也就是说,@count应该等于组数,而不是行数。

我当前的查询看起来是这样的,如果你想知道:

SELECT @row := @row +1 AS rownum, date 
FROM (SELECT @row := 0) r, stats 

非常感谢。

+0

要知道有多少行每日期存在,只是做:选择日期,从统计组到日期计数(*) – Nathan 2012-08-03 22:04:03

+0

是的,但我想知道如何将它集成到子查询中 – felamaslen 2012-08-03 22:10:49

回答

3

这样的事情呢?

SELECT 
    (CASE WHEN @date <> date THEN @row := @row +1 ELSE @row END) AS rownum, 
    @date:= date, 
    date 
FROM (SELECT @row := 0, @date := NOW()) r, stats 
+0

这似乎是个窍门! – felamaslen 2012-08-03 22:07:50

2

您不需要用户变量来回答您正在执行的查询。有没有你想要使用的用户变量的理由

如果没有(例如,以模拟排名功能):

-- how many groups are there? 
select count(distinct date) distinct_groups from table; 

-- each group and count of rows in the group 
select date, count(*) from table group by date; 

-- if you want the Nth row from each group, assuming you have an auto_increment called id: 
select * 
    from table 
    join (select date, max(id) id 
      from table 
      group by date 
) sq 
    on table.id = sq.id 
+0

目标是选择每第n行,但将每个组视为一行。每行都与“服务器”值和“状态”值关联。这是一个正常运行时间图。 – felamaslen 2012-08-03 22:06:39

+0

谢谢,这对我很有帮助,因为我正在寻找没有变量 – SeanDowney 2013-03-19 20:07:41