1

私が製品を持っているとします:

folio   price     quantity
1      100.00       1
1      450.00       2
3      150.00       1
4      600.00       2

条件:(製品の価格に応じた支払い条件の数を知るため)

level    term
0.01       12
100.00     14
200.00     16
300.00     18
400.00     20
500.00     22

次のような結果のテーブルを作成するにはどうすればよいですか。

folio    price    quantity     term
1        100.00   1            14
1        450.00   2            20

私は使用してみました:

SELECT a.*, b.term 
FROM products AS a 
JOIN terms AS b ON b.level <= a.price 
WHERE a.folio = 1

しかし、私は最終的に得ます:

folio price   quantity   term
1     100.00  1          12
1     100.00  1          14
1     450.00  2          12
1     450.00  2          14
1     450.00  2          16
1     450.00  2          18
1     450.00  2          20

最大の用語を持つ行のみを取得するにはどうすればよいですか? 助けてください!

4

1 に答える 1

1

terms テーブルのすべてではなく、1 つの行を探しています。これを行う 1 つの方法は、相関サブクエリを使用することです。

SELECT p.*,
       (select t.term from terms t where p.price >= t.level order by t.level desc limit 1
       ) as term
FROM products p 
WHERE p.folio = 1;

条件テーブルを変更して最低価格と最高価格を設定できれば、使いやすくなります。

lead()そして、次の関数でこれを模倣できます。

select p.*, t.term
from products p left outer join
     (select t.*, lead(level) over (order by level) as nextlevel
      from terms t
     ) t
     on p.price >= t.level and (p.price < t.nextlevel or t.nextlevel is null)
where p.folio = 1;
于 2013-05-27T17:12:03.597 に答える