2012-12-08 33 views
4

我有一個表(tbl_people),在這個表中我有一個日期時間字段,我想分組和統計10年組中的記錄...結果應該是這樣的:
|算上      |今年                    |
| 1000         | 1980-1989 |
| 250               | 1990-1999 |

我可以寫多個查詢來做到這一點,但這意味着我將不得不爲每個範圍編寫不同的查詢。有沒有辦法來動態地從至少一年向上遞增(10年爲間隔),並計算記錄的間隔時間內有多少?組年份樂隊間隔

回答

4

首先計算出十年的每一行

select floor(year(`year`)/10) * 10 as decade 
from tbl_people 

,然後,如果你想在近十年的一列使用這個中間結果計數SQL Fiddle

select count(*), decade, decade + 9 
from (select floor(year(`year`)/10) * 10 as decade 
     from tbl_people) t 
group by decade 

或本SQL Fiddle

select count(*) as count, concat(decade, '-', decade + 9) as year 
from (select floor(year(`year`)/10) * 10 as decade 
     from tbl_people) t 
group by decade 
+0

這樣做...謝謝:) – IROEGBU

0

這應該工作 - SQL Fiddle(感謝奧拉夫Dietsche用於顯示我這個美好的網站存在):

SELECT 
    COUNT(`year`) as `count`, 
    CONCAT(
     FLOOR(YEAR(`year`)/10) * 10, 
     '-', 
     (CEIL(YEAR(`year`)/10) * 10) - 1 
    ) as `year` 
FROM 
    `tbl_people` 
GROUP BY 
    CONCAT(
     FLOOR(YEAR(`year`)/10) * 10, 
     '-', 
     (CEIL(YEAR(`year`)/10) * 10) - 1 
    ) 

如果數字是1992年,FLOOR(1992/10)會給199,和次10會給1990。關於CEIL(1992/10) = = 200和時間10 = 2000,減號1,給出1999,因此year應該是1990-1999

+0

我需要從表格中選擇最小年份。然後根據它創建樂隊。奧拉夫的答案就是這樣。 – IROEGBU

0

這會有所幫助。

select CONCAT(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10,'-',(FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10)+9) as year , count(ID) from 
    TABLE group by FLOOR(YEAR(from_unixtime(TIMESTAMP))/10)*10;