2012-03-27 2 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を表示できますか? – frostshoxx

+1

https://stackoverflow.com/questions/44231218/limit-max-and-group-by-returned-too-manyrows/44231696#44231696 – Phil

+1

下記のRANK()を使用したソリューションも使用できます。 – Phil

3

なり結果:

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

私はこの+1を与えて、誰かがコメントなしで与えた-1を無効にしました。私にはうまく見えます。 –

+0

@ElRonnoco、彼は-1と書いてあったので、私はそれを 'SUM(price)'と書いたので –

+0

ああ、彼らは説明をコメントに残さなかったので、私は彼らがまだ間違っていたと思った!あなたがdownvoting人々のコメントを残す必要があるもう一つの理由 - あなたがdownvoted答えが変わるかもしれません! –

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

0

Iは、上記の答えが分(価格)との間でデータが関連付けられていることに気づきます。

関連するデータとともに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" 

を与えるは同じです。

IDの各行が一意の番号とOPの例のように繰り返し可能ではない何をしている場合、私はこのどこかの周りの仕事があるかもしれないと確信しているが、これはアップだけで頭

関連する問題