2016-12-16 133 views
1

我有一個SQL表上表特定日期之間一個月明智的日期(從日期爲準)

event_name location meter_id timestamp  
powerfail hyd  000'2016-11-23 15:03:57' 
powerfail hyd  0000'2016-11-24 14:03:57' 

這樣的SQL查詢,我有表,我有這麼多的紀錄,我想記錄monthwise我有一個查詢請修改發送儘早 我的查詢是:

select distinct event_name, count(event_name) 
from eventlog el 
where event_name='power_failed' 
and el.timestamp >= '2016-10-01' 
and el.timestamp < '2016-10-30' 
group by event_name 
order by event_name desc 

我想這樣

月份名稱,事件名稱EVENTCOUNT輸出

+0

您使用的是MySQL還是Oracle? (不同的日期/時間功能。) – jarlh

+0

這裏不需要SELECT DISTINCT,GROUP BY不會返回任何重複。 – jarlh

+0

我刪除了不兼容的數據庫標籤。請給你真正使用的數據庫添加標籤(我猜這是基於日期格式的MySQL)。 –

回答

3
select 
    monthname(timestamp) as monthname, 
    event_name, (select count(*) from eventlog where event_name =  
    el.event_name and month(timestamp) = month(el.timestamp) and 
    year(timestamp)= year(el.timestamp)) as EventCount 
from eventlog el 
where el.timestamp >= '2016-10-01' and el.timestamp < '2016-10-30' 
group by event_name, year(timestamp), month(timestamp) 

希望這能爲你工作。

0

在派生表中,將時間戳轉換爲字符串,並選取前7個字符以獲取YYYY-MM的一部分。然後GROUP BY結果:

select el.mnth, el.event_name, count(*) 
from 
(
    select substr(cast(timestamp as varchar(30)), 1, 7) as mnth, event_name 
    from eventlog 
) el 
group by el.mnth, el.event_name 
order by el.event_name desc, el.mnth 
+0

我想事件名稱數月明智 –

+1

是的,這會給它輸出給你。 – jarlh

0
select event_name, count(event_name) 
from eventlog el 
where event_name='power_failed' 
And el.timestamp BETWEEN '2016-10-01' And '2016-10-30' 
group by event_name 
order by event_name desc 
+0

這是隻有一個月像這樣我想每個wonth eventname計數 –

+0

需要'GROUP BY'。 – jarlh

+0

另外,10月31日將會錯過... – jarlh

相關問題