2015-06-10 165 views
0

我有以下查询:子查询与更新语句在SQL

SELECT 
    CONVERT(datetime, CONVERT(varchar, new_time, 101)) As day, 
    datepart(hh,new_time) As hour,count(*) As Total 
FROM 
    log_table 
WHERE 
    new_time > GETDATE() - 180 
GROUP BY 
    CONVERT(datetime, CONVERT(varchar, new_time, 101)),datepart(dd,new_time), datepart(hh,new_time) 
ORDER BY 
    CONVERT(datetime, CONVERT(varchar, new_time, 101)), datepart(hh,new_time)); 

我需要更新基于其结果表“tmp_table的”。我尝试以下,但它不工作:

UPDATE tmp_table 
SET count=Total 
WHERE date=day AND hour=hour 
FROM 
(
    select CONVERT(datetime, CONVERT(varchar, new_time, 101)) As day, 
    datepart(hh,new_time) As hour,count(*) As Total 
    from log_table 
    where new_time > GETDATE() - 180 
    group by CONVERT(datetime, CONVERT(varchar, new_time, 101)),datepart(dd,new_time), 
    datepart(hh,new_time) 
    order by CONVERT(datetime, CONVERT(varchar, new_time, 101)), datepart(hh,new_time)) 
) 

我需要从子查询获得“总”,“日”和“小时”的值。

+0

MySQL和SQL服务器是不同的RDBMS。你在用哪个? –

+0

我正在使用mssql – chinnusaccount

回答

1

如果您只想更新,那么你就需要通过订购,因此你可以使用一个CTE和加入这样:

With CTE AS 
    (
     SELECT CONVERT(DATETIME, CONVERT(VARCHAR, new_time, 101)) As day, 
       DATEPART(hh,new_time) As hour, 
       COUNT(*) As Total 
     FROM log_table 
     WHERE new_time > GETDATE() - 180 
     GROUP BY CONVERT(DATETIME, CONVERT(VARCHAR, new_time, 101)), 
        DATEPART(dd,new_time), 
        DATEPART(hh,new_time) 
    ) 
    UPDATE tmp_table 
    SET Count= CTE.Total 
    FROM tmp_table INNER JOIN CTE 
     ON temp_table.date=cte.day AND temp_table.hour=cte.hour