2012-03-27 97 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" 

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

我敢肯定,有可能是解決這個地方的作品,但是這僅僅是一個擡頭