2017-03-02 53 views
0

與項目的最大數量的值我有此列的表格:如何獲得在MySQL

id | param | value | flag | date_v (datetime field)

,我需要獲得通過PARAM,標誌和日期(每隔15分鐘平均值gruping ),我得到這個具有:

select param, flag, avg(value) 
     date_add(date_add(date(date_v), interval date_format(date_v, '%H') hour), interval ceil(date_format(date_v, '%i')/15)*15 minute) as date_v, 
     count(*) as items 
from instant_values 
group by param, flag, 
     date_add(date_add(date(date_v), interval date_format(date_v, '%H') hour), interval ceil(date_format(date_v, '%i')/15)*15 minute) 

與此查詢我從每個標誌每一個平均值,但是,我需要從每個分組date_v的重複最多的標誌只得到平均值。

謝謝。

編輯

隨着我的查詢,我得到事端這樣的:

"19" "T" "63,00" "2016-01-07 08:00:00" "1" 
"19" "T" "158,94" "2016-01-07 08:15:00" "2" 
"19" "M" "178,00" "2016-01-07 08:15:00" "1" 
"20" "T" "1,89" "2016-01-07 08:00:00" "1" 
"20" "M" "8,00" "2016-01-07 08:15:00" "2" 
"20" "F" "1,10" "2016-01-07 08:15:00" "3" 

,我需要得到的只是與每一個PARAM最大數量和「小時」結束行,在這種情況下, ,我需要得到這個:

"19" "T" "63,00" "2016-01-07 08:00:00" "1" 
"19" "T" "158,94" "2016-01-07 08:15:00" "2" 
"20" "T" "1,89" "2016-01-07 08:00:00" "1" 
"20" "F" "1,10" "2016-01-07 08:15:00" "3" 

回答

0

要獲得一個值,可以使用變量。我想你只是想每個「日期」一個值。這裏是一個例子:

select pfd.* 
from (select pfd.*, 
      (@rn := if(@d = date_v, @rn + 1, 
         if(@d := date_v, 1, 1) 
         ) 
      ) as rn 
     from (select param, flag, avg(value) 
        date_add(date_add(date(date_v), interval date_format(date_v, '%H') hour), interval ceil(date_format(date_v, '%i')/15)*15 minute) as date_v, 
        count(*) as items 
      from instant_values 
      group by param, flag, 
        date_add(date_add(date(date_v), interval date_format(date_v, '%H') hour), interval ceil(date_format(date_v, '%i')/15)*15 minute) 
      ) pfd cross join 
      (select @d := '', @rn := 0) 
     order by date_v, count(*) desc 
    ) pfd 
where seqnum = 1; 
+0

我已經添加了更多的信息來澄清我想要做什麼。我試着用你的代碼,但我只得到一個結果。 – Darkerviti

+0

@Darkerviti。 。 。這應該是每個'date_v'返回一個結果。 –

+0

我收到一個警告:不正確的日期時間值:「第1行的列'date_v'。 當我評論where子句時,它給了我這個錯誤,因爲沒有列seqnum。 – Darkerviti