2013-02-10 384 views
0

報告請求的寫入存在問題,這反映了每天創建和更新事件的數量。SQL請求報告

該表包括:

FieldTypeComment

id int (11) NOT NULL 
name varchar (255) NULL 
created_on datetime NOT NULL 
updated_on datetime NOT NULL 

創建和更新日期可能不重合。

要求:

SELECT 
    z.date_created, 
    SUM (IF (z.date_created = z.date_updated, 1, 0)) AS created, 
    SUM (IF (z.date_created! = Z.date_updated, 1, 0)) AS updated 
FROM 
(
    SELECT 
     SUBSTRING (e.updated_on, 1, 10) AS date_updated, 
     SUBSTRING (e.created_on, 1, 10) AS date_created 
    FROM 
     event e 
) z 
GROUP BY 
    z.date_created 

我需要以下結果: enter image description here

不得到期望的結果,因爲不顯示所有日期。

+0

爲什麼使用子串?你可以使用'DATE(e.updated_on)' – 2013-02-10 12:10:06

+0

首先你說你想要在某一天創建或更新的事件的數量,但是你說你沒有得到所有的日期。這使得很難弄清楚你想要做什麼。 – 2013-02-10 12:22:00

+0

如果要顯示沒有任何數據的日期,則需要生成一個包含這些日期的臨時表並鏈接到該表。 – Hogan 2013-02-10 12:48:22

回答

1

假設你想

  • 看到所有的日期;
  • count create其實;
  • 計數update僅當它是不是創建其他日期:

http://www.sqlfiddle.com/#!2/56254/39

SELECT A.* 
,(SELECT count(created_on) 
    FROM event WHERE date=created_on) created 
,(SELECT sum(created_on<>updated_on) 
    FROM event WHERE date=updated_on) updated 
FROM (
SELECT created_on date FROM event 
UNION SELECT updated_on FROM event) A 
+0

此查詢不會顯示僅包含updated_at(該字段唯一)的日期。 – korvinko 2013-02-10 15:01:39

+0

現在列表中的所有日期和更新僅在與創建日期不同時才計數。 – revoua 2013-02-10 16:30:47

+0

謝謝!非常好! – korvinko 2013-02-10 17:14:13

0

要獲得創建和更新在某一天的事件數,做這樣的事情。

select count(*) events 
from event 
where 
(created_on >= {d '2013-02-10'} and created_on < {d '2013-02-11'}) 
or 
(updated_on >= {d '2013-02-10'} and updated_on < {d '2013-02-11'}) 

該方法考慮了這些字段的時間部分。

+0

我需要在報告中顯示大約一年的每一天,大約有365個這樣的請求 – korvinko 2013-02-10 15:05:21