0

我正在处理这个 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 错误报告不是很有用。

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

4

2 回答 2

1

我没有看到@start 和@end 的用法

编辑:现在可以了!

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

于 2013-07-23T09:17:34.293 回答
1

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

...检查与您的 MySQL 服务器版本相对应的手册,以了解在“开始和结束 JOIN registerON ... ”附近使用的正确语法

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

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

其他问题包括:

  • start, end, 并且n不是列
  • register(在WHERE子句中)是模棱两可的
  • 你在一个JOIN子句之后有一个WHERE子句
  • 您没有为派生表的第二列指定别名a(可能没有必要,但可能会导致问题)
  • 使用?参数而无法指定值(尽管这是 SQL Fiddle 的限制,不一定是您的 SQL 语句的问题)
于 2013-07-23T09:20:06.467 回答