2013-07-23 30 views
0

我正在对this SQLFiddle工作,无法获得命令的工作。这里的命令:复杂的MySQL CMD与连接和计数器不工作

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错误报告不是非常有用的。

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

回答

1

有很多很多事情不对您的查询。然而,正在报告在骗取钱财的错误是:

...检查对应于你的MySQL服务器版本之间的开始和结束使用近”正确的语法JOIN register的手动...

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

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

的其他问题包括:

  • startendn不列
  • register(在WHERE子句中)是模糊
  • 你有一个JOIN条款在WHERE条款
  • 您不指定别名派生表a(也许不是必要但可能会导致问题)
  • 使用?参数的第二列没有办法指定的值(尽管这是SQL小提琴的限制,而不是一定与你的SQL语句有问题)
+0

我定的是一样的。 Thx,但仍有问题(看看新的小提琴) –

+0

你没有看到这个http://sqlfiddle.com/#!2/6dc97/34/4 – jaczes

+0

再次修复它。但仍然是一个问题,我不能解决: 未知列'realvalues.DeviceID'在'条款 http://sqlfiddle.com/#!2/6dc97/38 –

1

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

编辑:现在它的作品!

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

+0

'realvalues'.'Timestamp'介于开始和结束 –

+0

'@ start'并不像'start' – jaczes