2017-09-25 61 views
0

我想寫一個查詢,我需要從X年到Y年之間獲取數據的所有出現位置,其中數據必須出現在每年(X + 1,X +2)。例如,從X年到Y年的連續年份。SQL連續出現的範圍

現在我可以想到的唯一解決方案是使用SELECT語句,該語句出現在X年INNER JOIN年(X + 1)中,直到Y但它不是非常可行YX是一個龐大的數字。

在SQL中有沒有一種更優雅的方式呢? 我目前使用PostgreSQL

謝謝!

編輯:

示例查詢:查找是每年出版1992年至1995年的所有雜誌, 因此我預期的輸出只能是A或如果1995〜1997年,它應該只爲B

------------------------------ 
| Magazine | Year_of_publish | 
------------------------------ 
| A  | 1992   | 
------------------------------ 
| B  | 1993   | 
------------------------------ 
| A  | 1993   | 
------------------------------ 
| A  | 1994   | 
------------------------------ 
| A  | 1995   | 
------------------------------ 
| B  | 1995   | 
------------------------------ 
| B  | 1996   | 
------------------------------ 
| B  | 1997   | 
------------------------------ 
+0

提示:包含預期年限的幫助表可能會有用。做一個外連接。 – jarlh

回答

2
select Magazine 
from t 
where Year_of_publish between 1992 and 1995 
group by Magazine 
having count(distinct Year_of_publish) = 1995-1992+1 
1

如果在你的問題的表稱爲editions,這應該做的伎倆:

SELECT e.magazine 
FROM generate_series(1992, 1995) s 
    JOIN editions e ON s.s = e.year_of_publish 
GROUP BY e.magazine 
HAVING count(*) = 1995 - 1992 + 1; 

您必須更換所有出現在適當的年份,1992年和1995年。