【发布时间】:2019-04-16 23:01:47
【问题描述】:
我正在通过自定义 sql 查询连接到 Tableau Desktop 上的 Wonderware Historian 数据库。在查询中使用 with 语句时遇到问题。
SELECT DateTime, Compteur, Valeur
FROM
(
SELECT DateTime, TagName AS Compteur
, Value - LAG(Value, 1, NULL) OVER (PARTITION BY TagName ORDER BY
DateTime) AS Valeur
FROM History
WHERE TagName IN
(
'H270ME01MDB90.vol',
'H270ME01MDB91.vol',
'HA44AC01CDI07.vol',
'HA44AC01CDI06.vol'
)
AND DateTime >='2018-12-31 23:59:00'
AND wwRetrievalMode='Delta'
)t
WHERE t.DateTime >='2018-12-31 23:59:59'
使用此代码,我可以从数据库中获取日期,但我需要操作这些数据并执行以下操作:
WITH t AS
(
SELECT DateTime, Compteur, Valeur
FROM (SELECT DateTime, TagName AS Compteur
, Value - LAG(Value, 1, NULL) OVER (PARTITION BY TagName ORDER
BY DateTime) AS Valeur
FROM History
WHERE TagName IN ('H270ME01MDB90.vol', 'H270ME01MDB91.vol',
'HA44AC01CDI07.vol', 'HA44AC01CDI06.vol'
) AND
DateTime >='2018-12-31 23:59:00' AND
wwRetrievalMode = 'Delta'
) k
WHERE k.DateTime >= '2019-01-01'
)
SELECT t.*
FROM t
UNION ALL
(SELECT dateadd(hh,datepart(hh,DateTime), cast(CAST(DateTime as date) as
Datetime)),
'K' as compteur,
(SUM(CASE WHEN Compteur IN ('H270ME01MDB90.vol', 'H270ME01MDB91.vol')
THEN Valeur END) /
SUM(CASE WHEN Compteur IN ('HA44AC01CDI07.vol', 'HA44AC01CDI06.vol')
THEN Valeur
END)
) * SUM(CASE WHEN Compteur IN ('HA44AC01CDI06.vol') THEN Valeur END)
FROM t
GROUP BY hour
);
它抛出一个错误,并说我应该在 with 语句之前放一个分号。当我添加它时,它说“;”附近的语法不正确。 任何帮助将不胜感激。 谢谢!
即使这个简单的 with 语句也行不通。
【问题讨论】:
-
Wnat 是没有
;的确切错误? -
这是我在没有分号的情况下得到的错误:关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。
-
你确定这是 MySQL 吗?
-
我的目标是通过对现有行进行一些计算并将结果添加到表中来获取数据并向数据添加新行(不更改数据库)。
-
这是 Wonderware Historian 数据库,并通过选择 Microsoft Sql Server 选项使用 Tableau 连接到它。顺便说一句 LAG() 工作正常,所以它应该支持这种事情吧?
标签: sql sql-server tableau-api common-table-expression