2013-10-21 73 views
1

UPDATE
我發現這個查詢:
SELECT CONCAT(DATE(GID), '/',HOUR(gdate), ':00:00〜', CONCAT(HOUR(gdate),':59:59'))as slice, COUNT(*) FROM t_table GROUP BY DATE(gdate), HOUR(gdate);

當8小時或一天沒有數據時,它不輸出零。有沒有辦法?
MYSQL - 日期時間,按組,正確的查詢


我有具有3個字段的表:

  • GID(INT)
  • gdate(日期時間)
  • ginfo顯示(文本)

我想查找兩個日期之間每天8小時輸出項目數量(字段ginfo)的正確查詢。我不確定是否清楚,因此我可以嘗試將其模式化:

第一個日期是:2013/10/01。第二個日期是: 2013/10/03。
第一天的PHP輸出爲 例如:
2013/10/01 00:00-07h59:8
2013/10/01 08:00-15h59: 2013/10/01 16:00 -23h59:7
對於第二天的PHP輸出 將是例如:
2013/10/01 00:00-07h59:2
2013/10/01 08:00-15h59:3
2013/10/01 16:00-23h59:1

在表中,有20個項目爲2013年10月1日。 表中2013/10/02有6個項目。

我找不到正確的查詢。
任何人都可以幫助我嗎?
請原諒我可憐的英語。

+0

如果有該時間段沒有行,應該有一個零的行,或沒有行OK? – Bohemian

+0

你能給我們sqlfiddle嗎? – Shafeeque

+0

最好找到一個ZERO。如果查詢格式良好,它將避免花費一些時間使用PHP腳本:=) – frontal

回答

0

你可以使用這樣的:

SELECT COUNT(gid) FROM [table_name] WHERE (gdate>=2013/10/01 00:00) and (gdate<=2013/10/01 07:00) 
UNION ALL 
SELECT COUNT(gid) FROM [table_name] WHERE (gdate>=2013/10/07 00:00) and (gdate<=2013/10/01 16:00) 
UNION ALL 
... bla bla with your conditions 

我覺得格式日期不正確,你可以找格式的日期。

+0

感謝您的回答。我試過查詢,但它顯示了這樣的東西:COUNT(gid)/ 507/507 – frontal

0

試試這個。

SELECT COUNT(ginfo) 
FROM 'TABLE_NAME' 
WHERE gdate BETWEEN 'from_date' AND 'to_date' 
GROUP BY (date(gdate) + INTERVAL 8 HOUR) 
+0

感謝您的答案。這對我所尋找的東西非常封閉,但還有兩件小事。 1-我想看看輸出中的periode(只有計數)。 2-如果沒有價值,會不會有零? (參考波希米亞的答案)。謝謝 – frontal

+0

我檢查得很好,有一個問題,因爲我有一天從00h00到23h59的條目,並且在輸出中只有一行是那一天。間隔不起作用? – frontal

+0

你可以提供sqlfiddle的情況嗎? –

0

你可以嘗試這樣的事情

SELECT ROUND(UNIX_TIMESTAMP(`gdate`)/(480 * 60)) AS timekey,count(*),`gdate` 
FROM your_table 
WHERE gdate BETWEEN '2013-10-01' AND '2013-10-03' 
GROUP BY timekey 

您可以參考以下詳細的解答

GROUP BY interval overlapping timestamp MySQL query

Group mysql query by 15 min intervals

+0

謝謝你的支持。輸出對我來說很奇怪。我不知道timekey的概念。我會檢查網址。其實,它不會輸出我真正想要的東西。 – frontal