SQL查询 - 如何获取每个分组中某一列的最大值

3
我有一个包含1000万行的表格,像这样:

enter image description here

我想按 [CoinNameId] (此列是外键) 分组,并获取每个 [CoinNameId] 组的 [CreatedAt] 的最大值,但我的查询返回错误:

enter image description here

如何解决这个问题?
3个回答

1
当您在select子句中使用聚合函数时,每个未聚合的字段都需要在group by子句中出现。这就是为什么您会收到错误消息。我不确定为什么您的查询中有select *。
您需要像这样编写查询语句:
SELECT CoinNameID, max([CreatedAt])
FROM [dbo].[CoinData]
GROUP BY [CoinNameID]

1
如果您只想要列 CreatedAtMAX(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

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接