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 eachproduct然后加入您的表:

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(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 回答
0

据我了解,标准 SQL 查询在大多数情况下应该在 Sybase 数据库上工作。我不是数据库管理员,但这样的事情可能会起作用:

SELECT * FROM 
  vegetables v 
INNER JOIN 
  (SELECT 
      iv.id, 
      MAX(iv.date) AS date
    FROM 
      vegetables iv 
    GROUP BY 
      iv.id
  ) maxv ON maxv.date = v.date
于 2013-04-18T10:34:09.900 回答