我正在研究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错误报告不是很有用。
[编辑]现在,该值与因子重复。
答案 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>
其他问题包括:
start
,end
和n
不是列register
(在WHERE
子句中)含糊不清JOIN
子句WHERE
个子句
a
的第二列指定别名(可能不是必需但可能会导致问题)?
参数而无法指定值(尽管这是SQL Fiddle的限制,而不是必然 SQL语句的问题)