2012-08-03 206 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