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