Mysql
在 MySQL 中查找列的值之間的間隙
在電影演員的餐桌上,
CREATE TABLE ArtistMap ( ArtistID int(11) unsigned NOT NULL, MovieID int(11) unsigned NOT NULL, Year year, INDEX(MovieID), INDEX(Year), PRIMARY KEY(ArtistID,MovieID) ) ENGINE=InnoDB
如何選擇藝術家作品中間隔X年之前的電影?
例如,
ArtistID MovieID Year 1 1 1985 1 2 1987 1 3 2000 1 4 2001 1 5 2002
我想在藝術家的作品中獲得10年間隔之前的領域(間隔發生在1987-200之間,當時藝術家沒有播放任何電影)。我想得到
ArtistID MovieID Year 1 1 1985 1 2 1987
如果有多個差距,第一個就足夠了。
使用
LEAD(year)
或LAG(year)
發現 10 年以上的差距。然後使用ROW_NUMBER()
在該間隙之前保留行。(參見“視窗函式”,自 MariaDB 10.2 或 MySQL 8.0 起可用。)
(不是答案,而是可能有用的提示。)
在 MariaDB 中,
SELECT ... FROM seq_1985_to_2022 AS seq LEFT JOIN ArtistMap AS am ON am.Year = seq.num
將提供該範圍內的所有年份。用於
seq.num
“年”;am.Year
將是NULL
失踪的歲月。因此,您可以通過添加來獲取失去的年份WHERE am.Year IS NULL
或者,也許您想要對失去的年份進行計數或空白。如果是這樣,使用變成
COALESCE(...)
或空白。NULL``0
10 年的差距——檢查我添加的“差距和島嶼”標籤;它可能會有所幫助。