SQL:每个条件仅一行(第一行)的嵌套查询

时间:2019-12-21 08:55:52

标签: sql sql-server

我在进行简单查询时遇到困难。

这是我的桌子:

DIA  PALE POWER  COST
8     7     82   335    
8     7     85   335  <-- 
8     7     96   335  <--
8     8    120   345
9     7    110   324

这是我的目标:选择每个DIA和PALE具有最低成本的值。    但是当成本相同时,仅返回最低的功率。

DIA  PALE POWER  COST
8     7     82   335
8     8    120   345
9     7    110   324

我已经开始查询,但是我缺少执行FIRST(MIN(POWER))之类的部分

Select *
From Table1 T1
WHERE [cost] = (Select min([cost])
             From Table1
             Where dia = T1.dia AND pale = T1.pale)

任何帮助将不胜感激。

致谢

2 个答案:

答案 0 :(得分:1)

您可以使用子查询按成本和功率的顺序对行进行排序(成本至上,这是最重要的),并仅选择每个dia / pale组中排名第一的行;

SELECT DIA PALE, POWER, COST
FROM (
  SELECT *, RANK() OVER (PARTITION BY DIA, PALE ORDER BY COST, POWER) rank
  FROM Table1
) q
WHERE rank=1

An SQLfiddle to test with

答案 1 :(得分:0)

这不是一个简单的分组吗

SELECT DIA, PALE, MIN(POWER), COST
FROM From Table1 T1
WHERE [cost] = (Select min([cost])
         From Table1
         Where dia = T1.dia AND pale = T1.pale)
GROUP BY DIA, PALE, COST