没有连接的最小查询的SQL值

时间:2014-03-10 01:09:01

标签: sql join min

我经常要解决以下问题。假设我有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

3 个答案:

答案 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分组(通过将窗口查询放在分组查询中)