多年后,我正试图重新回到 sql 中。我也是 Sybase 的新手。您能否就以下问题提出一个可能的查询?
有一个表叫蔬菜如下。
| product | price | date |
| beans | 1.78 | 20040903 |
| beans | 1.79 | 20040902 |
| potato | 1.78 | 20040902 |
我需要获取每种蔬菜的最新可用价格。预期的数据库是 sybase。非常感谢。
您可以使用子查询来获取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 查询在大多数情况下应该在 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