SQL查询 - 如何按列值获取每个组的列的最大值

时间:2018-02-25 04:24:24

标签: sql sql-server

我有一个包含1000万行的表,如下所示:

enter image description here

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

enter image description here

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

在select子句中使用聚合时,每个未聚合的字段都需要在group by中。这就是你收到错误的原因。我不确定你为什么在查询中选择*。

你必须有这样的查询:

SELECT CoinNameID, max([CreatedAt])
FROM [dbo].[CoinData]
GROUP BY [CoinNameID]

答案 1 :(得分: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

答案 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]