使用JOINS和计数器的复杂MySQL cmd不起作用

时间:2013-07-23 09:11:47

标签: mysql sqlfiddle

我正在研究this SQLFiddle并且无法使命令正常工作。这里命令:

SET @n := 1;
SET @start := '2013-07-22 10:00:01';
SET @end := '2013-07-22 10:00:02';
SET @register := 40001;

SELECT * FROM 
    (
    SELECT
        `realvalues`.`Timestamp`,
        `realvalues`.`Value` * `register`.`Factor`,
        @x := @x + 1 AS rank
    FROM
        `realvalues`,
        (SELECT @x := 0) t            
    WHERE
        `realvalues`.`Register` = register AND
        `realvalues`.`Timestamp` BETWEEN start AND end
    JOIN
        `register`
    ON
        `register`.`DeviceID` = `realvalues`.`DeviceID` AND
        `register`.`Register` = `realvalues`.`Register`
    ) a
WHERE
    rank MOD ? = n

有人知道命令失败的地方吗? MySQL错误报告不是很有用。

[编辑]现在,该值与因子重复。

2 个答案:

答案 0 :(得分:1)

我没看到@start和@end

的用法 编辑:现在可行了!

sqlfiddle.com /#!2 / 6dc97 / 50

答案 1 :(得分:1)

您的查询有很多问题。但是,小提琴中报告的错误是:

  

...查看与您的MySQL服务器版本对应的手册,以便在'BETWEEN start AND end JOIN register ON ...

附近使用正确的语法

BETWEEN的语法不正确。 IS之前应该没有BETWEEN令牌。正确的语法是:

<value> BETWEEN <lower-bound-inclusive> AND <upper-bound-inclusive>

其他问题包括:

  • startendn不是列
  • register(在WHERE子句中)含糊不清
  • JOIN子句
  • 后面有WHERE个子句
  • 您没有为派生表a的第二列指定别名(可能不是必需但可能会导致问题)
  • 使用?参数而无法指定值(尽管这是SQL Fiddle的限制,而不是必然 SQL语句的问题)