Mysql 在动态日期上增加行索引并与其他表合并
问题: 我查看了其他各种增加行数的示例,但都导致了相同的错误输出。我遇到的问题是,我的代码没有成功地增加行数,从而在下面以红色突出显示的每集结果集中,为每一新行构建正确的索引 我的第一次尝试是:Mysql 在动态日期上增加行索引并与其他表合并,mysql,set,row,dateinterval,collate,Mysql,Set,Row,Dateinterval,Collate,问题: 我查看了其他各种增加行数的示例,但都导致了相同的错误输出。我遇到的问题是,我的代码没有成功地增加行数,从而在下面以红色突出显示的每集结果集中,为每一新行构建正确的索引 我的第一次尝试是: SET @ep_1 = "Peaky Blinders"; SET @curRow_1 = 0; SELECT DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day, @curRow_1 := @curRow_1 + 1 AS row_
SET @ep_1 = "Peaky Blinders";
SET @curRow_1 = 0;
SELECT
DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day,
@curRow_1 := @curRow_1 + 1 AS row_number,
@ep_1 AS episode_title,
COUNT(id) AS episode_plays
FROM netflix.episode_plays
WHERE
episode_id = "xyz"
AND created_at >= "2019-07-01" AND created_at <= "2019-07-07"
GROUP BY 1
注:我与Netflix没有任何关系,我只是使用Netflix虚拟数据来回答我的问题我将我的问题分为多个部分,得出下面的最终答案 最重要的部分是将初始结果集添加到子查询中,然后从表x1、x2等中选择数据。 问题的第二部分是,在我的案例中,如何将多个数据集组合在一起:如何不仅针对一个特定的netflix剧集,而且针对多个剧集?我决定接受工会的全部条款。 在第一次迭代中,我尝试对日期进行编码,之后发现区间函数非常有用。 最后,我通过在设置变量后添加COLLATUTF8\uUnicode\uCI修复了unicode错误。 如果您发现我的代码中有错误或有任何其他建议,请随时提出建议
-- SET DATA
-- variables for table x1
SET @ep_1 = "Peaky Blinders" COLLATE utf8_unicode_ci;
SET @id_1 = (SELECT id FROM netflix.episodes WHERE episode_title = @ep_1);
SET @date_1 = (SELECT created_at FROM netflix.episodes WHERE episode_title = @ep_1);
SET @curRow_1 = 0;
-- variables for table x2
SET @ep_2 = "Brooklyn Nine-Nine" COLLATE utf8_unicode_ci;
SET @id_2 = (SELECT id FROM netflix.episodes WHERE episode_title = @ep_2);
SET @date_2 = (SELECT created_at FROM netflix.episodes WHERE episode_title = @ep_2);
SET @curRow_2 = 0;
-- QUERY DATA
SELECT
x1.year_month_day,
@curRow_1 := @curRow_1 + 1 AS row_number,
x1.episode_title,
x1.episode_plays
FROM (
SELECT
DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day,
@ep_1 AS episode_title,
COUNT(id) AS episode_plays
FROM netflix.episode_plays
WHERE
episode_id = @id_1
AND created_at >= @date_1 AND created_at <= DATE_ADD(@date_1 , INTERVAL 7 DAY)
GROUP BY 1) x1
UNION ALL
SELECT
x2.year_month_day,
@curRow_2 := @curRow_2 + 1 AS row_number,
x2.episode_title,
x2.episode_plays
FROM (
SELECT
DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day,
@ep_2 AS episode_title,
COUNT(id) AS episode_plays
FROM netflix.episode_plays
WHERE
episode_id = @id_2
AND created_at >= @date_2 AND created_at <= DATE_ADD(@date_2 , INTERVAL 7 DAY)
GROUP BY 1) x2
我做了必要的更新。是否可以删除您的评论?请参阅。。。由于您在qeuries中正在做一些更复杂的事情,比如使用不需要的集合,那么@curRow_1确实是行数所必需的。。。此外,由于ANSI/ISO SQL 99标准,GROUP BY 1语法已被弃用和删除。。。SQL 92 BNF::=|需要有显式的ORDER BY,因为MySQL在更现代的MySQL版本5.7+中已被弃用,并使用GROUP BY进行隐式排序。。。MySQL 8不再自动按分组排序。
-- SET DATA
-- variables for table x1
SET @ep_1 = "Peaky Blinders" COLLATE utf8_unicode_ci;
SET @id_1 = (SELECT id FROM netflix.episodes WHERE episode_title = @ep_1);
SET @date_1 = (SELECT created_at FROM netflix.episodes WHERE episode_title = @ep_1);
SET @curRow_1 = 0;
-- variables for table x2
SET @ep_2 = "Brooklyn Nine-Nine" COLLATE utf8_unicode_ci;
SET @id_2 = (SELECT id FROM netflix.episodes WHERE episode_title = @ep_2);
SET @date_2 = (SELECT created_at FROM netflix.episodes WHERE episode_title = @ep_2);
SET @curRow_2 = 0;
-- QUERY DATA
SELECT
x1.year_month_day,
@curRow_1 := @curRow_1 + 1 AS row_number,
x1.episode_title,
x1.episode_plays
FROM (
SELECT
DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day,
@ep_1 AS episode_title,
COUNT(id) AS episode_plays
FROM netflix.episode_plays
WHERE
episode_id = @id_1
AND created_at >= @date_1 AND created_at <= DATE_ADD(@date_1 , INTERVAL 7 DAY)
GROUP BY 1) x1
UNION ALL
SELECT
x2.year_month_day,
@curRow_2 := @curRow_2 + 1 AS row_number,
x2.episode_title,
x2.episode_plays
FROM (
SELECT
DATE_FORMAT(created_at, "%Y%m%d") AS year_month_day,
@ep_2 AS episode_title,
COUNT(id) AS episode_plays
FROM netflix.episode_plays
WHERE
episode_id = @id_2
AND created_at >= @date_2 AND created_at <= DATE_ADD(@date_2 , INTERVAL 7 DAY)
GROUP BY 1) x2