2013-07-23 34 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