1

何年も離れた後、SQLに戻ろうとしています。私はSybaseも初めてです。次の問題について考えられるクエリを提案していただけますか?

以下のように野菜というテーブルがあります。

| product | price | date     |
| beans   | 1.78  | 20040903 |
| beans   | 1.79  | 20040902 |
| potato  | 1.78  | 20040902 |

各野菜の最新の利用可能な価格を取得する必要があります。目的のデータベースは sybase です。どうもありがとう。

4

2 に答える 2

3

サブクエリを使用してmax(date)for eachを取得productし、テーブルに結合することができます。

select v1.product, 
  v1.price,
  v1.date
from vegetables v1
inner join
(
  select product, max(date) MaxDate
  from vegetables
  group by product
) v2
  on v1.product = v2.product
  and v1.date = v2.maxdate;

SQL Fiddle with Demoを参照してください(デモは SQL Server ですが、構文は有効である必要があります)。

お使いの Sybase のバージョンがウィンドウ関数をサポートしている場合は、次を使用できます。

select product, price, date
from 
(
  select product, price, date,
    row_number() over(partition by product order by date desc) rn
  from vegetables
) v
where rn = 1;

デモで SQL Fiddle を参照してください

于 2013-04-18T10:26:52.487 に答える