1

我正在使用Sybase它不支持人们在这里使用的很多很酷的功能。所以,在帮助我的时候请记住这一点。

我有一个看起来像这样的数据库:

类型         RowTime             数量        
第一类 1 10:01:01.000 50          
猫 1 2 10:01.01.001 0          
1 类 3 10:01:01.002 1000          
1 类 4 10:01.01.003 100          
1 类 5 10:01:03.001 100          

除了cat2、cat3、cat4 等

我想根据. ascending order所以,对于上面给定的表格,我想提取row 5.

4

4 回答 4

4

在查看 sybase 文档后,您似乎有一个 rank 函数。所以这里是一个刺:

declare @table table ( tp varchar(30), rowtime datetime, quantity int) 

insert @table select 'cat1 1', '20120101', 50
insert @table select 'cat2 1', '20130101', 50
insert @table select 'cat3 1', '20110101', 50
insert @table select 'cat4 1', '20100101', 50
insert @table select 'cat5 1', '20090101', 50
select * from (
   select *, RANK() OVER (ORDER BY  RowTime DESC) AS Rank from @table 
) a
where [RANK]=1

从这里获得排名功能:http: //infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00169.1270/html/iqperf/ CEGDJFCE.htm

于 2013-01-11T21:15:33.173 回答
2

这是一种方式:

SELECT A.*
FROM YourTable A
INNER JOIN (SELECT Type, MAX(Time) MaxTime
            FROM YourTable
            GROUP BY Type) B
    ON A.Type = B.Type AND A.Time = B.MaxTime
于 2013-01-11T21:02:32.643 回答
1

SELECT * FROM table_name GROUP BY 类型 HAVING RowTime = max(RowTime)

于 2013-01-14T12:05:09.490 回答
0

几个 Oracle 查询可能会给您一些想法。我不确定这些分析功能是否在 Sybase 中可用。基本上,您需要按类别对查询进行分区,然后获取该类别中的最后一行 - 在您的情况下可能是 MAX(row_time) 。许多分析函数可用于此:ROW_NUMBER()、RANK()、DENSE_RANK()...

-- Selects sal within dept with Rank = 2 --
SELECT ename, sal, sal_rank
  FROM ( SELECT ename, sal, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal ASC) sal_rank FROM scott.emp ) 
WHERE sal_rank <= 2
/

-- MIN/MAX sal in each dept --
SELECT empno, deptno, sal,
   MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest",
   MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest"
 FROM scott.emp
ORDER BY deptno, sal
/
于 2013-01-11T21:44:29.630 回答