2012-03-27 101 views
12

最低值有表由这些字段:我如何分组,并选择在SQL

id | date_from | date_to  | price 
-------------------------------------------- 
CK1  22-12-2012 29-12-2012  800 
CK1  22-12-2012 29-12-2012  1200 
CK2  22-12-2012 29-12-2012  1400 
CK2  22-12-2012 29-12-2012  1800 
CK2  22-12-2012 29-12-2012  2200 

如何创建SQL选择组结果由ID,DATE_FROM,DATE_TO和选秀权,从最低的价格值。

那么结果将是

CK1  22-12-2012 29-12-2012  800 
CK2  22-12-2012 29-12-2012  1400 

回答

20
select id, date_from, date_to, min(price) 
from table 
group by id, date_from, date_to 
+0

如果什么ID的每一行是一个唯一的号码,而不是重复像OP的例子吗?我们如何显示标识而不分组? – frostshoxx 2017-05-29 01:41:06

+1

参见https://stackoverflow.com/questions/44231218/limit-max-and-group-by-returned-too-many-rows/44231696#44231696 – Phil 2017-05-29 07:49:12

+1

下面使用RANK()的溶液也可使用。 – Phil 2017-05-29 08:02:21

3

像这样:

SELECT id, date_from, date_to, MIN(price) 
FROM TableName 
GROUP BY id, date_from, date_to 
+0

我已经给出这个+1来抵消某人没有评论给出的-1。对我来说看起来很好。 – 2012-03-27 08:37:12

+0

@ElRonnoco,他是正确的-1,becouse我写的'SUM(价格)' – 2012-03-27 08:39:24

+0

啊,但他们并没有发表评论在我看来,解释,所以我他们仍然是错的!另一个原因为什么你应该总是在投降的时候留下评论 - 你低估的答案可能会改变! – 2012-03-27 08:42:42

0
SELECT id, date_from, date_to, min(price) 
FROM my_table 
GROUP BY id, date_from, date_to 
3

如果你的DBMS支持CTE那么你可以做这样的;

测试数据

DECLARE @tbl TABLE 
(
    id VARCHAR(100), 
    date_from VARCHAR(100), 
    date_to VARCHAR(100), 
    price INT 
) 

INSERT INTO @tbl 
VALUES 
    ('CK1','22-12-2012','29-12-2012',800), 
    ('CK1','22-12-2012','29-12-2012',1200), 
    ('CK2','22-12-2012','29-12-2012',1400), 
    ('CK2','22-12-2012','29-12-2012',1800), 
    ('CK2','22-12-2012','29-12-2012',2200) 

查询

;WITH CTE 
AS 
( 
    SELECT 
     RANK() OVER(PARTITION BY id ORDER BY price ASC) AS RowNbr, 
     tbl.* 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.RowNbr=1 
+0

该解决方案也适用于更复杂的情况。 – DerpyNerd 2016-09-16 09:55:50

0

我注意到的是,上述的答案都与分钟(价格)相关联的数据。

每当IVE试图使用min函数相关联的数据,它是可能的数据将是不正确。例如:

SELECT funder, customer, min(sq.rate) 'Highest Average Rate', max(sq.rate) 'Highest Average Rate' 
FROM tbl_x 
group by funder, customer 
order by rate desc 

"funder" "customer" "HighestRate"   "Highest Rate" 
"1"   "john"   "14.50"    "14.50" 
"2"   "matt"   "13.00"    "13.00" 

,你可以看到那里的最小值和最大值是相同的。

我敢肯定,有可能是解决这个地方的作品,但是这仅仅是一个抬头