我经常要解决以下问题。假设我有3列:Col A,Col B,Col C.
Col A包含我需要分组的日期。 Col B包含我需要为Col A中的每个组找到最小值的值.Col C包含我想要找到最小值的数据,即Col C的拉取值,对应于Col B中的min。
我通常会解决这个问题,但是编写JOIN语句。没有加入,有没有人知道更好的解决方案?这个问题对我来说似乎很常见,我认为创建专用的SQL命令是有意义的。这就像在最小点(从数学的角度来看)找到函数的值
此致
更新。
我为没有张贴我的意思的例子而道歉。这是我的表:
Location Quantity Street
New York 2 Broad
New York 3 Main
Pittsburgh 1 Grove
Pittsburgh 5 School
Austin 7 Hayes
Austin 2 Barn
我想按“位置”进行分组,并在每个组的“数量”中选择分钟。最后我想找到对应每个最小值的“街道”。
以下是我的最终输出结果:
Location Quantity Street
Austin 2 Barn
New York 2 Broad
Pittsburgh 1 Grove
以下是我如何实现它(我相信它太长了,应该有专用的SQL函数)
SELECT TheFunction.Location, Quantity, Street
FROM [AnalysisDatabase].[dbo].[ValueAtMin] As TheFunction
inner join
(SELECT [Location], Min([Quantity]) as MinValue
FROM [AnalysisDatabase].[dbo].[ValueAtMin] Group by [Location]) as XValue
on TheFunction.Location = XValue.Location and XValue.MinValue = TheFunction.Quantity
答案 0 :(得分:1)
这适用于mysql中的数据集:
select location, quantity, street
from tempso c
where quantity = (select min(quantity)
from tempso b
where c.location = b.location)
order by location
答案 1 :(得分:1)
试试下面的SQL:
数据表(使用@temp)
location quantity Street
------------------------------ ----------- ------------------------------
New York 2 Broad
New York 3 Main
Pittsburgh 1 Grove
Pittsburgh 5 School
Austin 7 Hayes
Austin 2 Barn
SQL:
select location, quantity, street from @temp a
where quantity in (select min(quantity) as quantity from @temp b group by location having a.location = b.location)
order by location asc, quantity desc
数据结果:
location quantity street
------------------------------ ----------- ------------------------------
Austin 2 Barn
New York 2 Broad
Pittsburgh 1 Grove
答案 2 :(得分:0)
在postgresql中:
select
distinct on (a)
a,b,c
from tbl
order by a, b
你也可以用窗口函数来实现它,找出正确的c, 然后按a分组(通过将窗口查询放在分组查询中)