J'ai une table avec ces colonnes:group by et max sur deux colonnes
id | series_id | season_id | episode_id | title | type ...
Je voudrais obtenir des lignes avec series_id
unique où season_id
et episode_id
sont max.
J'ai une table avec ces colonnes:group by et max sur deux colonnes
id | series_id | season_id | episode_id | title | type ...
Je voudrais obtenir des lignes avec series_id
unique où season_id
et episode_id
sont max.
Une solution consiste à faire:
SELECT t1.*
FROM YourTable AS t1
INNER JOIN
(
SELECT
series_id,
MAX(season_id) AS MAxSeasonId,
MAX(Episode_id) AS MAXEpisodeID
FROM yourTable
GROUP BY series_id
) AS t2 ON t1.series_id = t2.series_id
AND t1.season_id = t2.MaxSeasonId
AND t1.episode_id = t2.MaxEpisode_id;
SELECT *
FROM TableName t1
WHERE EXISTS (
SELECT 1
FROM t2
WHERE t1.series_id = t2.series_id
HAVING MAX(t2.season_id) = t1.season_id
AND MAX(t2.episode_id) = t1.episode_id
)
Essayez cette ..
SELECT * FROM TABLE
HAVING MAX(season_id) AND MAX(episode_id)
GROUP BY series_id
:)
Je pense que cela peut-être exagéré, mais il est le seul J'ai trouvé que ça marchera pour moi.
DECLARE @SeriesInfo TABLE
(
id INT,
series_id INT,
season_id INT,
episode_id INT,
title VARCHAR(50),
type CHAR(1)
);
INSERT INTO @SeriesInfo VALUES (1, 1, 1, 1, 'Series 1 Season 1 Episode 1', 'A'),
(2, 1, 1, 2, 'Series 1 Season 1 Episode 2', 'A'),
(3, 1, 1, 3, 'Series 1 Season 1 Episode 3', 'A'),
(4, 1, 2, 1, 'Series 1 Season 2 Episode 1', 'A'),
(5, 1, 2, 2, 'Series 1 Season 2 Episode 2', 'A'),
(6, 2, 1, 1, 'Series 2 Season 1 Episode 1', 'A'),
(7, 2, 1, 2, 'Series 2 Season 1 Episode 2', 'A'),
(8, 2, 1, 3, 'Series 2 Season 1 Episode 3', 'A'),
(9, 2, 1, 4, 'Series 2 Season 1 Episode 4', 'A'),
(10, 2, 2, 1, 'Series 2 Season 2 Episode 1', 'A'),
(11, 2, 2, 2, 'Series 2 Season 2 Episode 2', 'A'),
(12, 2, 2, 3, 'Series 2 Season 2 Episode 3', 'A');
SELECT id,
series_id,
season_id,
episode_id,
title,
type
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY series_id ORDER BY season_id DESC, episode_id DESC) RowNum,
*
FROM @SeriesInfo
) X
WHERE X.RowNum = 1;
--SELECT ROW_NUMBER() OVER(PARTITION BY series_id ORDER BY season_id DESC, episode_id DESC) RowNum, * FROM @SeriesInfo;
(Désolé pour l'abondance de données d'échantillon)
Le point est, si l'on prend juste le maximum de la series_id et season_id, nous n'obtiendrons une paire valide pour la série soit. Dans les deux cas, il y avait plus d'épisodes dans la saison 1 que dans la saison 2. La clause ROW_NUMBER() retournera un nombre unique par ligne mais à cause de la "PARTITION BY", elle redémarrera pour chaque série_id (voir la ligne commentée) . Si nous renvoyons seulement les lignes avec un ROW_NUMBER de 1, nous obtiendrons une ligne par serial_id et ce sera celle avec le maximum episode_id dans le max.
veuillez montrer votre tentative. –
Quel RDBMS utilisez-vous? –
vous pouvez jeter un oeil dans 'HAVING' – Najzero