簡體   English   中英

將此Sqlite查詢轉換為SQL Server在匹配的聚合行上返回值?

[英]Convert this Sqlite query to SQL Server returning values on the matching aggregate row?

此查詢使用特定於Sqlite的功能以每組最少的時間戳(自3.7.11開始)返回行上的信息。 但是,SQL Server表示,在查詢中使用group-by子句返回的所有列都必須具有某種聚合。

如何將此查詢轉換為SQL Server 2012?

SELECT 
    Id, MIN(TimestampTicks), TelemetryId, Value 
FROM 
    Events 
WHERE 
    TelemetryId in (1690, 1691, 1692, 1700) 
GROUP BY 
    TelemetryId
SELECT Id, MIN(TimestampTicks), TelemetryId, Value 
FROM  Events 
WHERE TelemetryId in (1690, 1691, 1692, 1700) 
GROUP BY Id, TelemetryId, Value 

不了解Sqlite,但是在sql server中,如果您在SELECT中使用了聚合函數,則任何未包含在任何聚合函數中的所有其他列都必須位於group by子句中,Sql Server需要知道如何在該列中聚合值。

借助SQL Server,您可以使用ROW_NUMBER()排名函數來獲得相同的行為。 時間戳記值最小的每個遙測id的行在每個組中的行號均為1。

WITH cte AS (
  SELECT id, timestampticks, telemetryid, value, 
     ROW_NUMBER() OVER (PARTITION BY telemetryid
                        ORDER BY timestampticks) rn
  FROM Events WHERE telemetryid in (1690, 1691, 1692, 1700) 
)
SELECT id, timestampticks, telemetryid, value FROM cte WHERE rn=1;

要使用進行測試的SQLfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM