我想在多年後回到sql。我也是Sybase新手。你能否建議一個可能的查詢以解決以下問題?可能的sybase sql查詢
有一張叫蔬菜的桌子如下。
| product | price | date |
| beans | 1.78 | 20040903 |
| beans | 1.79 | 20040902 |
| potato | 1.78 | 20040902 |
我需要得到每種蔬菜的最新可用價格。預期的數據庫是sybase。非常感謝。
我想在多年後回到sql。我也是Sybase新手。你能否建議一個可能的查詢以解決以下問題?可能的sybase sql查詢
有一張叫蔬菜的桌子如下。
| product | price | date |
| beans | 1.78 | 20040903 |
| beans | 1.79 | 20040902 |
| potato | 1.78 | 20040902 |
我需要得到每種蔬菜的最新可用價格。預期的數據庫是sybase。非常感謝。
您可以使用子查詢來獲得max(date)
每個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(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數據庫。我不是DB管理,但sometihng像這可能工作:
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
**'選擇產品,最大的蔬菜(日期)MAXDATE 通過product' 組** - 爲什麼我們不能用這個查詢? ** [SQL小提琴](http://sqlfiddle.com/#!3/41951/4)** – Luv
因爲他們希望與最高日期相關的價格,如果你添加,你將不得不由它分組以及價值觀是不同的。 – Taryn
@bluefeet優秀的答案。並用sql小提琴很好的提示(不知道那一個)。我在概念上想着做這樣的操作,但對語法不確定。現在我看到它是有道理的。 '分區的行號'語法對我來說是新的。將不得不看這個。非常感謝。 – junkie