Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在动态日期上增加行索引并与其他表合并_Mysql_Set_Row_Dateinterval_Collate - Fatal编程技术网

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