Mysql

在 MySQL 中查找列的值之間的間隙

  • April 10, 2022

在電影演員的餐桌上,

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 年的差距——檢查我添加的“差距和島嶼”標籤;它可能會有所幫助。

引用自:https://dba.stackexchange.com/questions/310754