带有连接和计数器的复杂MySQL cmd不起作用

带有连接和计数器的复杂MySQL cmd不起作用,mysql,sqlfiddle,Mysql,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`,

我正在工作,无法使命令工作。命令如下:

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错误报告不是很有用


[编辑]该值现在与系数一起复制。

我看不到@start和@end的用法

编辑:现在它工作了


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

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

…检查与您的MySQL服务器版本对应的手册,以了解在“开始和结束连接之间”附近使用的正确语法
register
ON

您在之间的
语法不正确。在
之间的
之前不应有
IS
标记。正确的语法是:

<value> BETWEEN <lower-bound-inclusive> AND <upper-bound-inclusive>
和之间的

其他问题包括:

  • start
    end
    n
    不是列
  • 寄存器(在
    WHERE
    子句中)不明确
  • WHERE
    子句之后有一个
    JOIN
    子句
  • 您没有为派生表
    a
    的第二列指定别名(可能不需要,但可能会导致问题)
  • 在没有指定值的情况下使用
    参数(尽管这是SQL FIDLE的一个限制,并不一定是SQL语句的问题)

realvalues
Timestamp
介于开始和结束之间
@start
start
不同,我修正了这一点。Thx,但仍有问题(看看新提琴)再次修复了它。但是仍然有一个我无法解决的问题:未知列'realvalues.DeviceID'in'on'子句我认为
寄存器
是对的?我想匹配寄存器列,但顺序很重要。你看到我的小提琴了吗?让我们看看