gpt4 book ai didi

sql - 检查多行的值,仅返回具有 MAX/MIN 的行

转载 作者:行者123 更新时间:2023-12-03 01:53:58 24 4
gpt4 key购买 nike

我正在尝试编写一个查询,该查询将比较 N 行的值并仅返回具有最大值的行。例如,如果我只想返回包含非重复行的表,但仅返回具有最新日期的行 -

key  | name  | value |   date
1 | frank | 100 | 1/1/2013
2 | peter | 200 | 2/1/2013
3 | jonny | 300 | 3/1/2013
4 | jonny | 300 | 4/1/2013

以及查询:

SELECT key, name, value, MAX(date)
FROM myTable
WHERE key IN (1,2,3,4)

我希望它能回来

key  | name  | value |   date
1 | frank | 100 | 1/1/2013
2 | peter | 200 | 2/1/2013
4 | jonny | 300 | 4/1/2013

我不确定如何使用 GROUP BY,我认为我在尝试中错过了一些基本的东西。

最佳答案

如果您只想要最新的行,您可以使用以下内容:

SELECT TOP 1 key, name, value, date
FROM myTable
ORDER BY date desc

这应该返回该表中具有最新日期的一行。

如果您想要每个名称的最新日期,您可以使用分组依据:

SELECT name, max(date)
FROM myTable
WHERE key in(1,2,3,4)
GROUP BY name

Max 是一个聚合函数。每当您使用聚合函数时,都必须在 group by 子句中指定未聚合的任何列。

因此,根据您的预期结果,您可能需要这样:

;with namesWithMaxDate as(
select
name
,max(date) as date
from
myTable
group by
name
)
select
myTable.[key]
,myTable.name
,myTable.value
,myTable.date
from myTable
inner join
namesWithMaxDate
on
myTable.name = namesWithMaxDate.name and
myTable.date = namesWithMaxDate.date

这稍微复杂一些,因为您想要返回的列未包含在分组中。因此有两个语句可以得出最终结果集。

最后一个选项:好的老式子查询。

 select 
myTable.[key]
,myTable.name
,myTable.value
,myTable.date
from myTable
inner join
( select
name
,max(date) as date
from
myTable
group by
name ) as namesWithMaxDate
on
myTable.name = namesWithMaxDate.name and
myTable.date = namesWithMaxDate.date

更多 here关于聚合函数。更多 here关于分组依据。

关于sql - 检查多行的值,仅返回具有 MAX/MIN 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19172285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com