流分析:来源'子查询'只能在时间谓词中使用' datediff'功能

时间:2018-01-25 12:29:10

标签: tsql azure-stream-analytics

我使用WITH查询两个子查询的流分析中的数据。我想组合来自两个子查询的数据并将它们放入sql中。所以,我正在使用JOIN功能。

WITH subquery as (
    SELECT
        id as id,
        deviceId as deviceId,
        username as username,
        try_cast(localtime as datetime) as localtime,
        AC as AC, FM as FM, UC as UC, 
        DL as DL, DS as DS, DP as DP,
        LB as LB, ASTV as ASTV, MSTV as MSTV,
        ALTV as ALTV, MLTV as MLTV, Width as Width,
        Min as Min, Max as Max, Nmax as Nmax,
        Nzeros as Nzeros, Mode as Mode, Mean as Mean,
        Median as Median, Variance as Variance, Tendency as Tendency,
        EventProcessedUtcTime as EventProcessedUtcTime,
        Distress(AC,FM,UC,DL,DS,DP,1,LB,ASTV,MSTV,ALTV,MLTV,
            Width,Min,Max,Nmax,Nzeros,Mode,Mean,Median,Variance,
            Tendency,1,1,1,1,1,1,1,1,1,1,1,1) as resultFHR
    FROM
        iot
    ),

subquery2 as (
    SELECT
        id as id,
        deviceId as deviceId,
        username as username,
        try_cast(localtime as datetime) as localtime,
        rms,fmed,fpeak,sample_entropy,
        EventProcessedUtcTime as EventProcessedUtcTime,
        Labour("",1,1,1,"",rms,fmed,fpeak,sample_entropy,"","") as resultUC
    FROM
        iot
    )

SELECT
    id as id,
    deviceId as deviceId,
    username as username,
    localtime as localtime,
    AC as AC, FM as FM, UC as UC, 
    DL as DL, DS as DS, DP as DP,
    LB as LB, ASTV as ASTV, MSTV as MSTV,
    ALTV as ALTV, MLTV as MLTV, Width as Width,
    Min as Min, Max as Max, Nmax as Nmax,
    Nzeros as Nzeros, Mode as Mode, Mean as Mean,
    Median as Median, Variance as Variance, Tendency as Tendency,
    EventProcessedUtcTime as EventProcessedUtcTime,
    resultFHR.[classes] as distress,
    resultFHR.[probabilities] as distressProbability,
    resultUC.[classes] as labour,
    resultUC.[probabilities] as labourProbability
INTO
    sql
FROM
    subquery INNER JOIN subquerry2 ON subquerry.id = subquerry2. id 
    AND DATEDIFF(second, subquery, subquery2) BETWEEN 0 AND 20

它在最后一行提示我一个错误。

  

来源'子查询'只能在时间谓词中使用' datediff'功能。   例:   SELECT input1.a,input2.b FROM input1 JOIN input2 ON DATEDIFF(minute,input1,input2)BETWEEN 0和10。   请确保没有'或'在时间谓词中。

我已经按照给出的示例进行了操作,但仍然存在错误。如何组合这两个子查询?

1 个答案:

答案 0 :(得分:2)

语法错误可能是由最后两行中的拼写引起的。尝试将“subquerry”替换为“subquery”,如下所示:

FROM
    subquery 
INNER JOIN 
    subquery2 ON subquery.id = subquery2.id 
              AND DATEDIFF(second, subquery, subquery2) BETWEEN 0 AND 20