我有一个包含1000万行的表,如下所示:
我希望按[CoinNameId]分组(此列是外键)并为每个[CoinNameId]组获取[CreatedAt]的最大值,但我的查询返回错误:
我该如何解决这个问题?
答案 0 :(得分:1)
在select子句中使用聚合时,每个未聚合的字段都需要在group by中。这就是你收到错误的原因。我不确定你为什么在查询中选择*。
你必须有这样的查询:
SELECT CoinNameID, max([CreatedAt])
FROM [dbo].[CoinData]
GROUP BY [CoinNameID]
答案 1 :(得分:1)
如果您只想要列CreatedAt
和MAX(CreatedAt)
,则可以执行以下操作。
SELECT CoinNameID, MAX([CreatedAt])
FROM [dbo].[CoinData]
GROUP BY [CoinNameID]
如果您想要所有列以及MAX([CreatedAt])
,您可以像以下一样使用。
SELECT *,
(SELECT MAX([CreatedAt])
FROM [dbo].[CoinData] CDI WHERE CDI.CoinNameID=CD.CoinNameID) AS MAX_CreatedAt
FROM [dbo].[CoinData] CD
答案 2 :(得分:0)
您的查询有select *
SELECT
CoinNameId,MAX(CreatedAt) AS MaxCreatedAt
FROM [dbo].[CoinData]
GROUP BY CoinNameId
这将返回MAX(CreatedAt)
与其他列
SELECT
*, MAX([CreatedAt]) OVER (PARTITION BY [CoinNameId])
FROM [dbo].[CoinData]