2011-11-03 219 views
0

我想寫一個查詢,將返回按日期範圍分組的數據,我想知道是否有辦法在一個查詢(包括計算)中做到這一點,或者如果我需要寫三個單獨的數據?我表格中的日期存儲爲unix時間戳。MySql查詢 - 按日期範圍分組?

例如,我的記錄是這樣的:

id type timestamp 
312 87 1299218991 
313 87 1299299232 
314 90 1299337639 
315 87 1299344130 
316 87 1299348977 
497 343 1304280210 
498 343 1304280392 
499 343 1304280725 
500 343 1304280856 
501 343 1304281015 
502 343 1304281200 
503 343 1304281287 
504 343 1304281447 
505 343 1304281874 
566 90 1305222137 
567 343 1305250276 
568 343 1305387869 
569 343 1305401114 
570 343 1305405062 
571 343 1305415659 
573 343 1305421418 
574 343 1305431457 
575 90 1305431756 
576 343 1305432456 
577 259 1305441833 
578 259 1305442234 
580 343 1305456152 
581 343 1305467261 
582 343 1305483902 

我想寫一個查詢,會發現之間的「創建」日期的所有記錄:

  1. 2011-05 -01和2011-06-01(月)
  2. 2011-03-01 2011-06-01和(區)
  3. 2010-05-01 2011-06-01 AND(年)

我嘗試以下(在這種情況下,我硬編碼了UNIX值正好一個月,看我能得到它的工作...):

SELECT COUNT(id) AS idCount, 
MIN(FROM_UNIXTIME(timestamp)) AS fromValue, 
MAX(FROM_UNIXTIME(timestamp)) AS toValue 
FROM uc_items 
WHERE ADDDATE(FROM_UNIXTIME(timestamp), INTERVAL 1 MONTH) 
     >= FROM_UNIXTIME(1304233200) 

但是,這似乎並沒有工作,因爲fromValue是:2011-04-02 21:12:56和toValue是2011-10-25 06:20:14,顯然,它不是2011年5月1日和6/1/2011。

回答

2

這有啥可工作:

SELECT COUNT(id) AS idCount, 
    FROM_UNIXTIME(MIN(timestamp)) AS fromValue, 
    FROM_UNIXTIME(MAX(timestamp)) AS toValue 
FROM uc_items 
WHERE timestamp BETWEEN UNIX_TIMESTAMP('2011-05-01') AND UNIX_TIMESTAMP('2011-06-01 23:59:59') 

此外,作爲性能提示 - 避免你的表在WHERE子句中應用功能的列(如你有WHERE ADDDATE(FROM_UNIXTIME(timestamp)))。這樣做會阻止MySQL使用timestamp列中的任何索引。