可能的sybase sql查询
Posted
技术标签:
【中文标题】可能的sybase sql查询【英文标题】:Possible sybase sql query 【发布时间】:2013-04-18 10:23:37 【问题描述】:多年后我正在尝试重新使用 sql。我也是 Sybase 的新手。您能否就以下问题提出一个可能的查询?
有一个表叫蔬菜如下。
| product | price | date |
| beans | 1.78 | 20040903 |
| beans | 1.79 | 20040902 |
| potato | 1.78 | 20040902 |
我需要获取每种蔬菜的最新可用价格。预期的数据库是 sybase。非常感谢。
【问题讨论】:
【参考方案1】:您可以使用子查询为每个 product
获取 max(date)
,然后重新加入您的表:
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 with Demo
【讨论】:
select product, max(date) MaxDate from vegetables group by product
--为什么我们不能使用这个查询? SQL Fiddle
因为他们希望 price
与最大日期相关联,如果您添加,您也必须按它进行分组,并且值是不同的。
@bluefeet 很好的答案。以及 sql fiddle 的重要提示(不知道那个)。我在概念上考虑进行此类操作,但不确定语法。现在我看到它是有道理的。 “分区上的行号”语法对我来说是新的。将不得不查找。非常感谢。
@junkie 欢迎您,我认为并非所有版本的 Sybase 都支持 row_number,因此您必须检查您的版本。 :)【参考方案2】:
据我了解,标准 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
【讨论】:
以上是关于可能的sybase sql查询的主要内容,如果未能解决你的问题,请参考以下文章
怎么通过excel连接Sybase IQ数据库?然后可以在excel里面通过SQL查询该数据库
SQL Server 2008,Sybase - 低带宽上的大型选择查询