1

私のテーブル構造は以下のようなものです

vendor_id account_id 価格コード

27 2 0.058 91

29 2 0.065 91

23 2 0.043 91

30 2 0.085 91

31 3 0.085 91

コードが91に等しい最小価格、指定された範囲とaccount_idによるグループ間の価格を取得する必要があります

選択クエリを次のように使用しています

tbl_input_values から min_price、account_id、vendor_id として MIN(price) を選択します。ここで、code='91' および price>=0 および price<=2 は account_id でグループ化されます

そして、私は出力を次のように取得しています

min_price account_id vendor_id

0.043 2 27

0.085 3 31

しかし、そうあるべきです

min_price account_id vendor_id

0.043 2 23

0.085 3 31

4

4 に答える 4

0

試す;

SELECT tData.price, tData.account_id, tData.vendor_id FROM tbl_input_values, (SELECT price, account_id, vendor_id FROM tbl_input_values ORDER BY price ASC) AS tData WHERE tbl_input_values.account_id = tData.account_id GROUP by tbl_input_values.account_id;
于 2013-03-13T07:42:57.260 に答える
0

このクエリを試してください-

SELECT
  t1.*
FROM tbl_input_values t1
JOIN (
  SELECT
    MIN(price) AS min_price,
    account_id
  FROM tbl_input_values
  WHERE code = '91' AND price >= 0 AND price <= 2
  GROUP BY account_id
  ) t2
    ON t1.account_id = t2.account_id AND t1.price = t2.min_price
于 2013-03-13T07:21:27.580 に答える
0

このクエリを試してください

 SELECT 
      price, 
      account_id, 
      vendor_id 
 from 
      Table1
 where 
      (vendor_id, price) in 
      (select 
            vendor_id, 
            min(price) 
       from 
            Table1 
       WHERE 
            code = '91' AND 
            price >= 0 AND 
            price <= 2
       group by 
            account_id)

結合を使用したサブクエリなし

  SELECT 
        a.price, 
        a.account_id, 
        a.vendor_id 
  from 
        Table1 a,
        (select 
               vendor_id, 
               min(price) as 'price' 
        from 
               Table1 
        where 
               code='91' and 
               price>=0 and 
               price<=2
        group by 
               account_id) b
  WHERE 
        a.vendor_id = b.vendor_id AND 
        a.price = b.price
于 2013-03-13T07:26:29.787 に答える
0

クエリは account_id ごとの最低価格を正しく選択していますが、この価格を vendor_id と関連付ける必要があります。

ここに私のバージョンがあります:

SELECT iv.price AS min_price, iv.account_id, iv.vendor_id
  FROM tbl_input_values AS iv
  INNER JOIN (select min(price) AS min_price, account_id
    FROM tbl_input_values
    WHERE full_code='91' AND price>=0 AND price<=2
    GROUP BY account_id) AS mp
 ON iv.price=mp.min_price AND iv.account_id=mp.account_id;

2 つのベンダーの account_id の最低価格が同じ場合、このクエリは両方を返します。

ここでSQLフィドルを参照してください http://sqlfiddle.com/#!2/96d24/8

于 2013-03-13T07:33:25.043 に答える