2012-02-03 75 views
0

我有一個包含年份和電影ID的表格,並且每年我都要獲得該年度10年內ID的計數。sql選擇一個移動範圍

例如如果我有數據: 年| ID 1950年1 1951年2 1960年1

我希望回到 一年|算上 1950年3 1951年3 1960年1

我想我可以做這樣的

select m1.year, count(m1.id) 
    from movie m1 
    join movie m2 
    on m1.id=m2.id 
where m2.year>=m1.year 
    and m2.year<=m1.year+9 
group by m1.year 
order by m1.year; 

但這只是返回的電影每年(或似乎是,因爲結果是相同的選擇年,從電影組開始計數(id)逐年;)

我做錯了什麼?

+2

側面說明:你可以寫'其中m2 .year - m1.year BETWEEN 0 AND 9' – Benoit 2012-02-03 06:30:56

回答

1

入世對IDS是不是你想要的東西:你會得到一個1 < => 1的關係最有可能(我可以假設id是一個關鍵

SELECT m1.year, COUNT(*) 
    FROM (SELECT DISTINCT year FROM movie) m1 
CROSS JOIN movie M2 
WHERE m2.year - m1.year BETWEEN 0 AND 9 
GROUP BY m1.year 
ORDER BY m1.year 
+0

什麼是交叉連接? – Colleen 2012-02-03 06:35:03

+0

是的,id是主鍵 – Colleen 2012-02-03 06:35:34

+0

'CROSS JOIN'是笛卡爾積:m1的每一行你得到m2的每一行。可以用一個簡單的逗號代替'CROSS JOIN' – Benoit 2012-02-03 06:36:57